Keyword: ランダム相関行列
概要
本サンプルはランダム相関行列の生成を行うFortranによるサンプルプログラムです。 本サンプルは0.7、0.9、1.4の固有値をもつ 3x3 のランダム相関行列を生成し出力します。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g05pyf() のExampleコードです。本サンプル及びルーチンの詳細情報は g05pyf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg05pyf のマニュアルページを参照)| このデータをダウンロード |
G05PYF Example Program Data 1 1 1762543 :: GENID,SUBID,SEED(1) 3 1.0E-5 :: N,EPS 0.7 0.9 1.4 :: D
- 1行目はタイトル行で読み飛ばされます。
- 2行目に使用する生成器(genid=1:nAG基本生成器)、生成器に関する情報(subid=1:GENIDが1の場合この値は参照されません)、生成器の初期値(seed=1762543)を指定しています。
- 3行目に生成される相関行列の次数(n=3)と許容可能な誤差の最大値(eps=1.0E-5)を指定しています。
- 4行目に固有値(d)を指定しています。
出力結果
(本ルーチンの詳細はg05pyf のマニュアルページを参照)| この出力例をダウンロード |
G05PYF Example Program Results
Correlation Matrix
1 2 3
1 1.0000 -0.2549 -0.1004
2 -0.2549 1.0000 0.2343
3 -0.1004 0.2343 1.0000
- 4〜7行目に生成されたランダム相関行列が出力されています。
ソースコード
(本ルーチンの詳細はg05pyf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
PROGRAM g05pyfe
! G05PYF Example Program Text
! Mark 23 Release. nAG Copyright 2011.
! .. Use Statements ..
USE nag_library, ONLY : g05kff, g05pyf, nag_wp, x04caf
! .. Implicit None Statement ..
IMPLICIT NONE
! .. Parameters ..
INTEGER, PARAMETER :: lseed = 1, nin = 5, nout = 6
! .. Local Scalars ..
REAL (KIND=nag_wp) :: eps
INTEGER :: genid, ifail, ldc, lstate, n, subid
! .. Local Arrays ..
REAL (KIND=nag_wp), ALLOCATABLE :: c(:,:), d(:)
INTEGER :: seed(lseed)
INTEGER, ALLOCATABLE :: state(:)
! .. Executable Statements ..
WRITE (nout,*) 'G05PYF 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 the problem size and tolerance
READ (nin,*) n, eps
ldc = n
ALLOCATE (c(ldc,n),d(n))
! Read in the eigenvalues
READ (nin,*) d(1:n)
! Generate the correlation matrix
ifail = 0
CALL g05pyf(n,d,eps,state,c,ldc,ifail)
! Display the results
ifail = 0
CALL x04caf('General',' ',n,n,c,ldc,'Correlation Matrix',ifail)
END PROGRAM g05pyfe
