実際,今までに出てきたコマンドは
- READ(*,*)
- WRITE(*,*)
- DO, END DO
- DIMENSION A(??)
第8回目の演習では2次元の配列について説明した.配列は色々な計算において登場するが,特に行列の計算をする際は配列を使わないと計算できない.そこで今回の演習では具体的な行列の計算を行うプログラムを作成してみよう.
2×2の行列,2×1ベクトルの要素を入力し,入力した行列に右から入力したベクトルを掛けた結果を表示するプログラムを作成せよ.
実行結果として以下を表示させること
上記の計算は以下のようになります.行列を
A(1,1) | A(1,2) |
A(2,1) | A(2,2) |
として,ベクトルを
b(1) |
b(2) |
とすれば,結果は
A(1,1)×b(1)+A(1,2)×b(2) |
A(2,1)×b(1)+A(2,2)×b(2) |
となります.
配列の定義は以下のようになります.
DIMENSION A(2,2),B(2),C(2)
すなわち配列を3つ使う必要があります.さらに行列とベクトルのかけ算の部分は以下のようになります.
DO I=1,2
Z=0.0
DO J=1,2
Z=?+A(?,?)*B(?)
END DO
C(?)=Z
END DO
?の部分には何か適切な変数が入ります.あとは実行結果としてA(?,?)
,B(?)
,C(?)
の3つを表示すればよいわけです.分かりましたか?
C 行列の要素の入力
PROGRAM REPORT_NO9
IMPLICIT NONE
REAL :: X, Y
INTEGER :: I, J
REAL, DIMENSION (2,2) :: A, D
REAL, DIMENSION (2) :: B, C
WRITE(*,*) 'A行列の行と列の要素を入力せよ。ただし2×2行列'
DO I=1,2
DO J=1,2
WRITE(*,*) I,'行',J,'列の要素は?'
READ(*,*) X
A(I,J)=X
END DO
END DO
C ベクトルの要素の入力
WRITE(*,*) 'ベクトルBの要素を入力せよ.ただし2×1ベクトル'
DO K=1,2
WRITE(*,*) K,'行1列の要素は?'
READ(*,*) Y
B(K)=Y
END DO
C 行列とベクトルのかけ算
DO I=1,2
Z=0.0
DO J=1,2
Z=Z+A(I,J)*B(J)
END DO
C(I)=Z
END DO
C 結果の表示
DO I=1,2
WRITE(*,*) C(I)
END DO
STOP
END PROGRAM REPORT_NO9
All rights reserved.