私は Fortran の初心者で、4x4 行列を解くためにガウス消去法コードを書く必要があります。以下のコードは間違った結果を返し、問題をデバッグできませんでした。助けていただければ幸いです。
common /grid/ A(100,100), NEQ, C(100), X(100)
open(10, file="NEQ.txt", status='unknown')
read(10,*) NEQ
close (10)
open(12, file="C1.txt", status='unknown')
do i=1,NEQ
read(12,*) C(i)
enddo
close (12)
open(11, file="A1.txt", status='unknown')
do i=1,NEQ
read(11,*) (A(i,k), k=1,NEQ)
enddo
close (11)
call SOL
open(13, file="X.txt", status='unknown')
do i=1,NEQ
write(13,*) X(i)
enddo
close (13)
stop
end
subroutine SOL
common /grid/ A(100,100), NEQ, C(100), X(100)
c Forward Reduction Phase:
do 10 K=2,NEQ
do 10 I=K,NEQ
R=A(I,K-1)/A(K-1,K-1)
C(I)=C(I)-R*C(K-1)
do 10 J=K-1,NEQ
10 A(I,J)=A(I,J)-R*A(K-1,J)
c Back Substitution Phase:
X(NEQ)=C(NEQ)/A(NEQ,NEQ)
do 30 K=NEQ-1,1,-1
X(K)=C(K)
do 20 J=K+1,NEQ
20 X(K)=X(K)-A(K,J)*X(J)
30 X(K)=X(K)/A(K,K)
return
end
私の場合、NEQ はテキスト ファイルから 4 として読み取られます。私の A1.txt は次のとおりです。
18, -6, -6, 0
-6, 12, 0, -6
-6, 0, 12, -6
0, -6, -6, 18
C1.txt は次のとおりです。
60
0
20
0
結果の X 行列は次のようになります。
8.3333330
6.6666665
8.3333321
4.9999995
それ以外の:
13.13
14.17
15.83
15.00