Keyword: 多項分布, 整数疑似乱数ベクトル
概要
本サンプルは多項分布から整数疑似乱数ベクトルの生成を行うFortranによるサンプルプログラムです。 本サンプルは確率が以下で表される多項分布(この場合、k=4, m=6000, p1=0.08, p2=0.1, p3=0.8, p4=0.02)から20個の4次元の整数疑似乱数を生成し出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g05tgf() のExampleコードです。本サンプル及びルーチンの詳細情報は g05tgf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg05tgf のマニュアルページを参照)1 2 3 4 5
このデータをダウンロード |
G05TGF Example Program Data 1 1 1762543 :: GENID,SUBID,SEED(1) 20 :: N 6000 4 :: M,K 0.08 0.1 0.8 0.02 :: P
- 1行目はタイトル行で読み飛ばされます。
- 2行目に使用する生成器(genid=1:nAG基本生成器)、生成器に関する情報(subid=1:GENIDが1の場合この値は参照されません)、生成器の初期値(seed=1762543)を指定しています。
- 3行目に生成される乱数の数(n=20)を指定しています。
- 4行目に多項分布の試行回数(m=6000)と起こりうる結果の数(k=4)を指定しています。
- 5行目に多項分布の起こりうる結果の確率(p)を指定しています。
出力結果
(本ルーチンの詳細はg05tgf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
この出力例をダウンロード |
G05TGF Example Program Results 1 2 3 4 1 468 603 4811 118 2 490 630 4761 119 3 482 575 4821 122 4 495 591 4826 88 5 512 611 4761 116 6 474 601 4800 125 7 485 595 4791 129 8 468 582 4825 125 9 485 598 4800 117 10 485 573 4814 128 11 501 634 4749 116 12 482 618 4780 120 13 470 584 4810 136 14 479 642 4750 129 15 476 608 4807 109 16 473 631 4782 114 17 509 596 4778 117 18 450 565 4877 108 19 484 556 4840 120 20 466 615 4802 117
- 4~23行目に生成された整数疑似乱数が出力されています。
ソースコード
(本ルーチンの詳細はg05tgf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
このソースコードをダウンロード |
PROGRAM g05tgfe ! G05TGF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g05kff, g05tgf, nag_wp, x04eaf ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: lseed = 1, maxlr = 5000, nin = 5, & nout = 6 ! .. Local Scalars .. REAL (KIND=nag_wp) :: pmax INTEGER :: genid, ifail, k, ldx, lr, lstate, m, & mode, n, subid ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: p(:), r(:) INTEGER :: seed(lseed) INTEGER, ALLOCATABLE :: state(:), x(:,:) ! .. Intrinsic Functions .. INTRINSIC int, maxval, real, sqrt ! .. Executable Statements .. WRITE (nout,*) 'G05TGF Example Program Results' WRITE (nout,*) FLUSH (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 ! Read in the distribution parameters READ (nin,*) m, k ldx = n ALLOCATE (x(ldx,k),p(k)) ! Read in probabilities READ (nin,*) p(1:k) ! Use suggested value for LR pmax = maxval(p(1:k)) lr = int(3.0E1_nag_wp+2.0E1_nag_wp*sqrt(real(m, & kind=nag_wp)*pmax*(1.0E0_nag_wp-pmax))) ! If R is a reasonable size use MODE = 2 ! else do not reference R and use MODE = 3 IF (lr<maxlr) THEN mode = 2 ELSE mode = 3 lr = 0 END IF ALLOCATE (r(lr)) ! Generate the variates ifail = 0 CALL g05tgf(mode,n,m,k,p,r,lr,state,x,ldx,ifail) ! Display the variates ifail = 0 CALL x04eaf('General',' ',n,k,x,ldx,' ',ifail) END PROGRAM g05tgfe