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

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

[1] 今日の目標

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

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

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

  • 実数は必ず小数点がつく! 3.D0は実数,3は整数. 整数型と実数型の変数を混ぜて使うときには注意が必要である.以下に考えられるパ ターンを挙げる.
          integer m,n,l
          real*8 a,b,c  
    
          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
    
    
    結果はどうなったであろうか?

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

    [3.0]前回の復習

    1.D0
    2.D0
    3.D0
    4.D0
    5.D0
    
    と縦に並んだデータをファイル(retsu.datとする)から読み, 配列a(5)に格納するプログラム例:
           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)に格納するプログラム例:
          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 変数名のリスト/値のリスト/,...

    例:
           real*8 a(10),b(3,3),c(2,5),pi,e
           data pi,e/3.14159625D0,2.7182818D0/
           data a/8*0.D0,1.D0,5.D-1/,(b(i,i),i=1,3)/3*1.D0/
           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,3
              do j=1,3
                 write(6,*) i,j,b(i,j)
              enddo
           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]ベクトルの内積

    ベクトルの内積を求めるプログラムをつくる.

    [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 
    

    [6] 今日の宿題

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


    日程表へ戻る <<