Keyword: 整数ベクトル, 疑似ランダム置換
概要
本サンプルは整数ベクトルの疑似ランダム置換を行うFortranによるサンプルプログラムです。 本サンプルは1から8までの8個の昇順の整数を含むベクトルを10回置換しその結果を出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g05ncf() のExampleコードです。本サンプル及びルーチンの詳細情報は g05ncf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg05ncf のマニュアルページを参照)- 1行目はタイトル行で読み飛ばされます。
- 2行目に使用する生成器(genid=1:nAG基本生成器)、生成器に関する情報(subid=1:GENIDが1の場合この値は参照されません)、生成器の初期値(seed=1762543)を指定しています。
- 3行目に置換される値の数(n=8)と置換の数(nperm=10)を指定しています。
出力結果
(本ルーチンの詳細はg05ncf のマニュアルページを参照)| この出力例をダウンロード |
G05NCF Example Program Results 10 Permutations of first 8 integers 6 2 4 8 1 3 5 7 8 6 4 2 7 3 1 5 4 2 8 7 5 6 3 1 1 6 4 5 2 3 7 8 1 7 3 8 4 2 5 6 6 3 4 7 1 2 8 5 6 4 1 8 2 5 3 7 3 2 1 7 5 8 6 4 4 2 1 5 3 6 8 7 1 5 6 4 2 7 8 3
- 3行目に8個の整数について10回の置換が行われたことが示されています。
- 5〜14行目に整数ベクトルの置換が出力されています。
ソースコード
(本ルーチンの詳細はg05ncf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM g05ncfe
! G05NCF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : g05kff, g05ncf
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: lseed = 1, nin = 5, nout = 6
! .. Local Scalars ..
INTEGER :: genid, i, ifail, j, lstate, n, &
nperm, subid
! .. Local Arrays ..
INTEGER, ALLOCATABLE :: indx(:), state(:)
INTEGER :: seed(lseed)
! .. Executable Statements ..
WRITE (nout,*) 'G05NCF Example Program Results'
WRITE (nout,*)
! Skip heading in data file
READ (nin,*)
! Read in the base generator information and seed
READ (nin,*) genid, subid, seed(1)
! Initial call to initialiser to get size of STATE array
lstate = 0
ALLOCATE (state(lstate))
ifail = 0
CALL g05kff(genid,subid,seed,lseed,state,lstate,ifail)
! Reallocate STATE
DEALLOCATE (state)
ALLOCATE (state(lstate))
! Initialize the generator to a repeatable sequence
ifail = 0
CALL g05kff(genid,subid,seed,lseed,state,lstate,ifail)
! Read in sample size and number of permutations
READ (nin,*) n, nperm
ALLOCATE (indx(n))
WRITE (nout,99998) nperm, ' Permutations of first ', n, ' integers'
WRITE (nout,*)
! Permutate NPERM times
DO j = 1, nperm
! Set up the index vector
DO i = 1, n
indx(i) = i
END DO
! Call the permutation routine
ifail = 0
CALL g05ncf(indx,n,state,ifail)
! Display the results
WRITE (nout,99999) indx(1:n)
END DO
99999 FORMAT (1X,8I3)
99998 FORMAT (1X,I0,A,I0,A)
END PROGRAM g05ncfe
