Keyword: 距離行列, 計算, 多変量解析
概要
本サンプルは距離行列の計算を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて距離行列の計算を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g03eaf() のExampleコードです。本サンプル及びルーチンの詳細情報は g03eaf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg03eaf のマニュアルページを参照)1 2 3 4 5 6 7 8 9
このデータをダウンロード |
G03EAF Example Program Data 5 3 : N,M 'I' 'S' 'U' : UPDATE,DIST,SCAL 1.0 1.0 1.0 2.0 1.0 2.0 3.0 6.0 3.0 4.0 8.0 2.0 5.0 8.0 0.0 : End of X 0 1 1 : ISX
- 1行目はタイトル行で読み飛ばされます。
- 2行目に観測値の数(n=5)と変数の数(m=3)を指定しています。
- 3行目には既存の行列が更新されるかどうか(update='I':距離が行列Dに追加される前に行列Dは初期化される)、計算される距離の種類(dist='S':ユークリッド平方距離)、使用される変数の標準化(scal='U':スケーリングしない)を指定しています。
- 4~8行目に変数の値(x)を指定しています。
- 9行目に変数が距離行列の計算に含まれるどうかを示すフラグ(isx)を指定しています。"1"の場合は計算に含まれます。
出力結果
(本ルーチンの詳細はg03eaf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10
この出力例をダウンロード |
G03EAF Example Program Results Distance Matrix 1 2 3 4 2 1.00 3 29.00 26.00 4 50.00 49.00 5.00 5 50.00 53.00 13.00 4.00
- 3~10行目に距離行列が出力されています。
ソースコード
(本ルーチンの詳細はg03eaf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「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
このソースコードをダウンロード |
PROGRAM g03eafe ! G03EAF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g03eaf, nag_wp ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: nin = 5, nout = 6 ! .. Local Scalars .. INTEGER :: i, ifail, ld, ldx, lj, m, n, uj CHARACTER (1) :: dist, scal, update CHARACTER (80) :: fmt ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: d(:), s(:), x(:,:) INTEGER, ALLOCATABLE :: isx(:) ! .. Executable Statements .. WRITE (nout,*) 'G03EAF Example Program Results' WRITE (nout,*) ! Skip heading in data file READ (nin,*) ! Read in the problem size READ (nin,*) n, m ! Read in information on the type of distance matrix to use READ (nin,*) update, dist, scal ldx = n ld = n*(n-1)/2 ALLOCATE (x(ldx,m),isx(m),s(m),d(ld)) ! Read in the data used to construct distance matrix READ (nin,*) (x(i,1:m),i=1,n) ! Read in variable inclusion flags READ (nin,*) isx(1:m) ! Read in scaling IF (scal=='G' .OR. scal=='g') THEN READ (nin,*) s(1:m) END IF ! Compute the distance matrix ifail = 0 CALL g03eaf(update,dist,scal,n,m,x,ldx,isx,s,d,ifail) ! Display results WRITE (nout,*) ' Distance Matrix' WRITE (nout,*) WRITE (fmt,99999) '(3X,', n - 1, 'I8)' WRITE (nout,fmt) (i,i=1,n-1) WRITE (nout,*) WRITE (fmt,99999) '(1X,I2,2X,', n - 1, '(3X,F5.2))' DO i = 2, n lj = (i-1)*(i-2)/2 + 1 uj = i*(i-1)/2 WRITE (nout,fmt) i, d(lj:uj) END DO 99999 FORMAT (A,I0,A) END PROGRAM g03eafe