第9回目の演習

第9回目の演習で説明すること

実際,今までに出てきたコマンドは

READ(*,*)
WRITE(*,*)
DO, END DO
DIMENSION A(??)
4つだけです.意外でしたか?あとは変数の取り扱い,計算の方法だけの問題です.


配列を使った計算

第8回目の演習では2次元の配列について説明した.配列は色々な計算において登場するが,特に行列の計算をする際は配列を使わないと計算できない.そこで今回の演習では具体的な行列の計算を行うプログラムを作成してみよう.


第9回目に課したレポート課題(件名: 学籍番号 report_no9

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つを表示すればよいわけです.分かりましたか?


第9回目に課したレポートの解答


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


前のページへ戻る.
Copyright. 2020, Kazuya Sato

All rights reserved.