Keyword: 整数ベクトル, 疑似ランダムサンプリング
概要
本サンプルは整数ベクトルの疑似ランダムサンプリングを行うFortranによるサンプルプログラムです。 本サンプルは1から8までの8個の昇順の整数を含むベクトルからランダムにサンプルサイズ1から8までのサンプリングを行い、その結果を出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g05ndf() のExampleコードです。本サンプル及びルーチンの詳細情報は g05ndf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg05ndf のマニュアルページを参照)| このデータをダウンロード |
G05NDF Example Program Data 1 1 1762543 :: GENID,SUBID,SEED(1) 8 :: N 1 :: List of sample sizes (M) 2 3 4 5 6 7 8
- 1行目はタイトル行で読み飛ばされます。
- 2行目に使用する生成器(genid=1:nAG基本生成器)、生成器に関する情報(subid=1:GENIDが1の場合この値は参照されません)、生成器の初期値(seed=1762543)を指定しています。
- 3行目にサンプリングされるベクトルの要素の数(n=8)を指定しています。
- 4〜11行目にサンプルサイズ(m)を指定しています。
出力結果
(本ルーチンの詳細はg05ndf のマニュアルページを参照)| この出力例をダウンロード |
G05NDF Example Program Results
Samples from the first 8 integers
Sample size Values
1 2
2 3 6
3 1 5 7
4 2 6 7 8
5 1 2 3 4 8
6 1 3 4 5 6 7
7 1 3 4 5 6 7 8
8 1 2 3 4 5 6 7 8
- 3行目に8個の整数からのサンプリングであることが示されています。
- 5〜13行目にサンプルサイズとサンプリングされた値が出力されています。
ソースコード
(本ルーチンの詳細はg05ndf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM g05ndfe
! G05NDF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : g05kff, g05ndf
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: lseed = 1, nin = 5, nout = 6
! .. Local Scalars ..
INTEGER :: genid, i, ifail, lstate, m, n, pm, &
subid
! .. Local Arrays ..
INTEGER, ALLOCATABLE :: ipop(:), isampl(:), state(:)
INTEGER :: seed(lseed)
! .. Executable Statements ..
WRITE (nout,*) 'G05NDF 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
READ (nin,*) n
ALLOCATE (ipop(n))
! Display title
WRITE (nout,99999) ' Samples from the first ', n, ' integers'
WRITE (nout,*)
WRITE (nout,*) ' Sample size Values'
! Initialize the population
DO i = 1, n
ipop(i) = i
END DO
! Dummy allocation
ALLOCATE (isampl(1))
! Loop over different sample sizes
pm = 0
D_LP: DO
READ (nin,*,IOSTAT=ifail) m
IF (ifail/=0) THEN
EXIT D_LP
END IF
! Reallocate ISAMPL
IF (pm/=m) THEN
DEALLOCATE (isampl)
ALLOCATE (isampl(m))
pm = m
END IF
! Generate sample
ifail = 0
CALL g05ndf(ipop,n,isampl,m,state,ifail)
! Display the results
WRITE (nout,99998) m, isampl(1:m)
END DO D_LP
99999 FORMAT (1X,A,I0,A)
99998 FORMAT (1X,I6,9X,8(1X,I3))
END PROGRAM g05ndfe
