「プログラミング基礎」 第 5 回 連立一次方程式の解法

「プログラミング基礎」 第 5 回
連立一次方程式の解法
課題1
(1) Gauss-Jordan 法 を 用 い た 連 立 1 次 方 程 式 を 解 く プ ロ グ ラ ム
gauss_jordan.f90 を実行せよ。
(2) プログラムの m, n の値を変え、動作を確認せよ。
(3) 上記プログラムを利用して
  x  3 y  z  2w
 x  3 y  2 z  2w


 x yzw
2 x  2 y  3 z  3w



8
7
1
 10
を解け。
課題2
課題1で用いたプログラムの連立1次方程式を解く部分をサブルーチンとし
たい。(別紙)のサブルーチン部分を作成し、動作を確認せよ。
このようにサブルーチンとすれば別のプログラムでも簡単に利用できる。
レポート:課題2で作成したプログラムをレポート提出ページ
http://www.riam.kyushu-u.ac.jp/sosei/lecture_note/submit.html
(講義 Web ページにリンク有)より提出してください。
期限 5 月 25 日(月)正午
ファイル名は”gauss_jordan_学生番号.f90”
(例、gauss_jordan_2ES14999X.f90)としてください。
DEALLOCATE(a,b)
PRINT *, 'Inverse matrix'
DO i=1,n
PRINT *, (a(i,j),j=1,n)
ENDDO
PRINT *, 'Solution'
DO i=1,n
PRINT *, (b(i,j),j=1,m)
ENDDO
CALL GAUSSJ(a,n,b,m)
DO i=1,n
DO j=1,n
IF (i .EQ. j) THEN
a(i,j)=0.0
ELSE
a(i,j)=1.0
ENDIF
ENDDO
ENDDO
DO i=1,n
DO j=1,m
b(i,j)=i
ENDDO
ENDDO
PROGRAM GAUSS_JORDAN
IMPLICIT NONE
INTEGER :: n,m
REAL,DIMENSION(:,:),ALLOCATABLE :: a, b
INTEGER :: i,j
!
! Input matrix and vector
n=4
m=2
ALLOCATE(a(n,n),b(n,m))
!
!
!
!
1
!
CONTAINS
SUBROUTINE GAUSSJ(a,n,b,m)
<<この部分を作成せよ>>
END SUBROUTINE GAUSSJ
!
SUBROUTINE swap(p,q)
REAL :: p,q
REAL :: r
r=p; p=q; q=r
END SUBROUTINE
!
END PROGRAM GAUSS_JORDAN
2