主题:求助:为什么ivf下读取数据总是错误?
其实就是编写高斯全主元消去法的一个程序,编译器是最新的ivf和vs2008。最近想学学从外部文件中读取数据用于计算,但是怎么也不行啊:能生成,但是执行的时候总是不成功。实在没招了,请各位高手们帮忙解答啊!!!
我在input.txt中存放着4行5列的数据,用open去读取出来成数组C(4,5),然后赋值给A(4,4)和B(4)用于后续计算。
Program AGAUS0
Implicit none
Integer,Parameter ::N=4
Integer L,I,J,K,IS,m,r,o,p,q
Real D,T
Real ::A(N,N)
Real ::B(N),X(N),JS(N)
Real ::C(N,N+1)
Open(10,file='input.txt')
K=0
L=1
Read(10,*) C
Close(10)
Do I=1,N
Do J=1,N
A(I,J)=C(I,J)
End do
B(I)=C(I,N+1)
End do
Do K=1,N-1
D=0.0
Do I=K,N
Do J=K,N
If(Abs(A(I,J)).GT.D)Then
D=Abs(A(I,J))
JS(K)=J
IS=I
End if
End do
End do
If(D+1.0.EQ.1.0)Then
L=0
Else
If(JS(K).NE.K)Then
Do m=1,N
T=A(m,K)
A(m,K)=A(m,JS(K))
A(m,JS(K))=T
End do
End if
If(IS.NE.K)Then
Do p=K,N
T=A(K,p)
A(K,p)=A(IS,p)
A(IS,p)=T
End do
T=B(K)
B(K)=B(IS)
B(IS)=T
End if
End if !换主元完成
If(L.EQ.0)Then
Print*,'FAIL'
End if
Do q=K+1,N
A(K,q)=A(K,q)/A(K,K)
End do
B(K)=B(K)/A(K,K)
Do r=K+1,N
Do o=K+1,N
A(r,o)=A(r,o)-A(r,K)*A(K,o)
End do
B(r)=B(r)-A(r,K)*B(K)
End do
End do
If(Abs(A(N,N))+1.0.EQ.1.0)Then
L=0
Print*,'FAIL'
End if
X(N)=B(N)/A(N,N)
Do I=N-1,1,-1
T=0.0
Do J=I+1,N
T=T+A(I,J)*X(J)
End do
X(I)=B(I)-T
End do
JS(N)=N
Do K=N,1,-1
If(JS(K).NE.K)Then
T=X(K)
X(K)=X(JS(K))
X(JS(K))=T
End if
End do
Print*,(X(I),I=1,N)
End Program
[size=5]5[/size][color=800000]800000[/color]
我在input.txt中存放着4行5列的数据,用open去读取出来成数组C(4,5),然后赋值给A(4,4)和B(4)用于后续计算。
Program AGAUS0
Implicit none
Integer,Parameter ::N=4
Integer L,I,J,K,IS,m,r,o,p,q
Real D,T
Real ::A(N,N)
Real ::B(N),X(N),JS(N)
Real ::C(N,N+1)
Open(10,file='input.txt')
K=0
L=1
Read(10,*) C
Close(10)
Do I=1,N
Do J=1,N
A(I,J)=C(I,J)
End do
B(I)=C(I,N+1)
End do
Do K=1,N-1
D=0.0
Do I=K,N
Do J=K,N
If(Abs(A(I,J)).GT.D)Then
D=Abs(A(I,J))
JS(K)=J
IS=I
End if
End do
End do
If(D+1.0.EQ.1.0)Then
L=0
Else
If(JS(K).NE.K)Then
Do m=1,N
T=A(m,K)
A(m,K)=A(m,JS(K))
A(m,JS(K))=T
End do
End if
If(IS.NE.K)Then
Do p=K,N
T=A(K,p)
A(K,p)=A(IS,p)
A(IS,p)=T
End do
T=B(K)
B(K)=B(IS)
B(IS)=T
End if
End if !换主元完成
If(L.EQ.0)Then
Print*,'FAIL'
End if
Do q=K+1,N
A(K,q)=A(K,q)/A(K,K)
End do
B(K)=B(K)/A(K,K)
Do r=K+1,N
Do o=K+1,N
A(r,o)=A(r,o)-A(r,K)*A(K,o)
End do
B(r)=B(r)-A(r,K)*B(K)
End do
End do
If(Abs(A(N,N))+1.0.EQ.1.0)Then
L=0
Print*,'FAIL'
End if
X(N)=B(N)/A(N,N)
Do I=N-1,1,-1
T=0.0
Do J=I+1,N
T=T+A(I,J)*X(J)
End do
X(I)=B(I)-T
End do
JS(N)=N
Do K=N,1,-1
If(JS(K).NE.K)Then
T=X(K)
X(K)=X(JS(K))
X(JS(K))=T
End if
End do
Print*,(X(I),I=1,N)
End Program
[size=5]5[/size][color=800000]800000[/color]