配列に初期値を代入しておくには,data文を用いるやりかたと,配列式を用いるやりかたがある.すべての要素に同じ値を代入するときは,配列式が便利である.部分的に異なる値を代入しておく場合は,data文を用いる.
配列,変数を宣言した後に記述する.構文は以下のとおり.
data 変数や配列などの並び / 定数の並び /implicit none integer i,j double precision a(3,3),b data a,b / 4*0.D0, 5*1.D0, 10.D0 / do i=1,3 write(*,*) (a(i,j),j=1,3) enddo write(*,*) b end
4*0.D0と書くと,始めの4つの要素にゼロを代入する.引き続いて5*1.D0で残りの5つの要素に1.D0が代入される.上の例で,どの要素に0.D0が,どの要素に1.D0が格納されているか注意すること.また,変数や配列の要素の数と,定数の数が異なるとエラーになるので注意すること.
配列を用いて式を記述することができる.要素の数が同じであれば,加減乗除が可能.しかし,各要素についての演算を行うだけなので,次節で取り扱う通常の意味での行列の積にはなっていないので注意.
例:implicit none integer i,j double precision a(3,3),b(3,3),c(3,3) a=1.D0 b=2.D0 c=a+b do i=1,3 write(*,*) (c(i,j),j=1,3) enddo write(*,*) c=a*b do i=1,3 write(*,*) (c(i,j),j=1,3) enddo write(*,*) c=a/b do i=1,3 write(*,*) (c(i,j),j=1,3) enddo end
上の例では,配列a,bの全ての要素に1.D0と2.D0がそれぞれ代入され,配列の要素ごとに足し算,掛け算,割り算が行われる.通常の意味での行列の積や逆行列との積とはまったく異なるので注意すること.
例えば,3×3の行列Aと,3次元ベクトルBの積を考える.この積はベクトルであり,それをCとする.数式で書くと以下になる.
![]() |
(1) |
式通りにプログラムを書くと次になる.
do j = 1,3 C(i) = C(i) + A(i,j) * B(j) end do
先ほどの例と同様に,行列AとBとの積を考える.この結果は行列となり,それをCとすると次の式になる.この式を参考に行列の掛け算を行う.
![]() |
(2) |
2.D0 3.D0 4.D0 5.D0 6.D0 7.D0 8.D0 9.D0 10.D0hai2.dat
1.D0 2.D0 3.D0 4.D0 5.D0 6.D0 2.D0 4.D0 6.D0上の二つの3行3列の行列をそれぞれ hai1.dat,hai2.dat とする.