数値解析法及び演習 第三回

行列の掛け算
  1. 今日の目標
  2. 異なる型の混合演算について
  3. データの入出力つづき
  4. DATA文
  5. 行列の掛け算
  6. 今日の宿題

[1] 今日の目標

  1. ファイルからデータを読む, ファイルに書く
  2. 配列の概念を学ぶ
  3. 行列の掛け算を行なう

[2] 異なる型の混合演算について

FORTRANでは実数と整数を区別して変数に格納します. 正しい型の変数を用意しておかないと計算結果がおかしくなります. 変数の型には注意をはらうこと!

  • 実数は必ず小数点がつく! 3.D0は実数,3は整数. 整数型と実数型の変数を混ぜて使うときには注意が必要である.以下に考えられるパ ターンを挙げる.
          implicit none
          integer m,n,l
          real*8 a,b,c,d  
    
          l=5/2
          a=5/2
          m=5.D0/2.D0
          b=5.D0/2.D0
          n=5/2.D0
          c=5/2.D0
    
          write(6,*) l,a,m,b,n,c,d
          end
    
    
    結果はどうなったであろうか? dの値は?

  • [3] データの入出力つづき

    [3.0]配列にデータを格納

    1.D0
    2.D0
    3.D0
    4.D0
    5.D0
    
    と縦に並んだデータをファイル(retsu.datとする)から読み, 配列a(5)に格納するプログラム例:
           implicit none 
           integer i
           real*8 a(5)
           open(1,file='retsu.dat')
           do i=1,5
             read(1,*) a(i)
    	 write(6,*) a(i)
           enddo
           end
    
    1.D0 2.D0 3.D0 4.D0 5.D0
    
    と横に並んだデータをファイル(gyou.datとする)から読み, 配列a(5)に格納するプログラム例:
          implicit none 
          real*8 a(5)
          integer i
    
          open(1,FILE='gyou.dat')
          read(1,*) (a(i),i=1,5)
          write(6,*) (a(i),i=1,5)
          end
    

    [3.1]二次元配列

    配列の要素を指定する番号は複数あってもよい. 二つになると二次元配列となり, 三つになると三次元配列となる. FORTRANでは7次元の配列まで使用可能である.

    二次元配列の宣言:
    宣言文 配列名(寸法の下限:寸法の上限, 寸法の下限:寸法の上限)

    例1
    real*8 a(10,10) 
    
    a(1,1)からa(10,10)まで要素を100個持つ倍精度実数型二次元配列を宣言

    例2
    integer i(2,-1:8)
    
    i(1,-1)からi(2,8)まで要素を20個もつ実数型二次元配列を宣言

    [3.2]二次元データの読み取り

    以下の数値をファイル matrix.dat にコピーし, それぞれの数値を二次元配列a(2,3)に格納するプログラムを作成せよ.
    1.D0 2.D0 3.D0
    4.D0 5.D0 6.D0
    

    [4] DATA文

    変数,配列を初期化する際に用いる.配列の場合,値の格納順序に注意(下の例を参照)

    data文 data 変数名のリスト/値のリスト/,...

    例:
           implicit none 
           integer i,j
           real*8 a(10),c(2,5),pi,e
           data pi,e/3.14159625D0,2.7182818D0/
           data a/8*0.D0,1.D0,5.D-1/
           data c/3*1.D0,7*1.D2/
    
           write(6,*) 'pi=',pi,'e=',e
    
           do i=1,10
              write(6,*) i,a(i)
           enddo
    
           do i=1,2
              do j=1,5
                 write(6,*) i,j,c(i,j)
              enddo
           enddo
    
           end
    

    [5] 行列の掛け算

    [5.1]配列データのとりあつかい

    練習問題

    3.0節のデータファイルretsu.datと, 列ベクトルを読み込むプログラムを今日のディレクトリにコピーする. そのプログラムを書き換え, データの総和, 平均値, 分散を求めるプログラムを作成せよ.

    [5.2]ベクトルの内積

    ベクトルの内積を求めるプログラムをつくる.
    1. それぞれのベクトルの成分をファイルから読み込み,内積を求めなさい.
    2. それぞれのベクトルの成分の総和,平均値,標準偏差を求めなさい.

    [5.3]行列の掛け算

    2.D0 3.D0 4.D0        1.D0 2.D0 3.D0  
    5.D0 6.D0 7.D0        4.D0 5.D0 6.D0
    8.D0 9.D0 10.D0       2.D0 4.D0 6.D0 
    
    上の二つの3行3列の行列をそれぞれ hai1.dat,hai2.dat とする.
    1. それぞれの行列の対角和を求めなさい.
    2. この行列の掛け算を行い,結果を ans.dat に書き出すプログラムをつくりなさい.
    3. 左の行列の2乗を求めなさい.
    4. 左の行列の7乗を求めなさい.

    [6] 今日の宿題

    5.3節,4番のプログラム, 答えを送ること. 〆切は10/20.


    日程表へ戻る <<