STEP.06 Fortranの基礎その3 – 配列
ここではFortranの「配列」について解説します。 配列とは、ベクトルや行列などの添え字付の変数を記述するための機能です。 以下で、具体的に配列がどのようなものか、どのように使うかなどについて見ていきます。
01 ベクトルの内積の計算-配列の基礎
次のような、ベクトルの内積を考えてみます。
Fortranでは、ベクトルのような添え字付の変数を配列によって表すことができます。 配列を用いて、上のベクトルの内積の計算を行なうサンプル・プログラムを以下に示します。
program main implicit none real(8) :: a(1:3),b(1:3) real(8) :: s integer :: i a(1)=2.0d0 a(2)=3.0d0 a(3)=5.0d0 b(1)=-1.0d0 b(2)=0.0d0 b(3)=4.0d0 s=0.0d0 do i=1,3 s=s+a(i)*b(i) end do write(*,*)'a*b = ',s end
上のプログラムではベクトル a,b のそれぞれの成分を配列 a(3),b(3) として扱っています。 配列もほかの変数と同様に real(8) などによって定義します。ただし、ほかの変数とは異なり、配列はその大きさまで指定しなければなりません。 サンプル・プログラム内では real(8) :: a(1:3),b(1:3) と書いて配列の大きさを3としています。 このように定義することで、プログラムの中で a, b のカッコ内に数字を入れた変数 a(1),a(2),a(3),b(1),b(2),b(3) を扱うことができるようになります。 上のように添え字の始まりが 1 の場合は、始まりの値を省略して real(8) :: a(3),b(3) と書くこともできます。 また、宣言されていない領域である a(0), a(4) などはプログラム中では用いることはできません。 必ずプログラム内で使用する添え字の範囲が、宣言したときの範囲を超えないようにしましょう。
以下に、配列を使ったプログラムの例として行列とベクトルの積の計算を行なうプログラムを示します。 参考にして配列を使たプログラミングをしてみましょう。
program main implicit none integer,parameter :: N=2 real(8) :: x(N),y(N),a(N,N) integer :: i,j x(1)=1.0d0 x(2)=-1.0d0 a(1,1)=1.0d0 a(1,2)=0.0d0 a(2,1)=-1.0d0 a(2,2)=2.0d0 do i=1,N y(i)=0.0d0 do j=1,N y(i)=y(i)+a(i,j)*x(j) end do end do write(*,*)'y(1) =',y(1) write(*,*)'y(2) =',y(2) end