主题:[原创]请各位高手帮看看这个程序什么地方错了
艾瑞达a
[专家分:0] 发布于 2011-10-20 12:22:00
此程序是求线性方程组 ,能运行,就是结果不正确
program ex123
implicit none
integer i,j,k,A(3,3),B(3),x(3)
read(*,*) ((A(i,j),i=1,3),j=1,3)
read(*,*) (B(i),i=1,3)
Do 30,k = 1,2
Do 20,i = k+1,3
Do 10,j = k,3
A(i,j)=A(i,j)-A(k,j)*(A(i,k)/A(k,k))
B(i)=B(i)-B(k)*(A(i,k)/A(k,k))
10 continue
20 continue
30 continue
x(3)=B(3)/A(3,3)
x(2)=(B(2)-A(2,3)*x(3))/A(2,2)
x(1)=(B(1)-A(1,2)*x(2)-A(1,3)*x(3))/A(1,1)
Do 40,i = 1,3
print*,x(i)
40 continue
end
回复列表 (共11个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2011-10-20 12:34:00
我一眼望去,没看到一个浮点型
却有A(i,k)/A(k,k)等计算式相除……
板凳
edelweiss [专家分:60] 发布于 2011-10-20 12:47:00
嗯,浮点型的不能做 除法。楼主试试把数组定义成integer
3 楼
艾瑞达a [专家分:0] 发布于 2011-10-20 13:10:00
program ex123
implicit none
integer i,j,k
real A(3,3),B(3),x(3)
read(*,*) ((A(i,j),i=1,3),j=1,3)
read(*,*) (B(i),i=1,3)
Do 30,k = 1,2
Do 20,i = k+1,3
Do 10,j = k,3
A(i,j)=A(i,j)-A(k,j)*(A(i,k)/A(k,k))
B(i)=B(i)-B(k)*(A(i,k)/A(k,k))
10 continue
20 continue
30 continue
x(3)=B(3)/A(3,3)
x(2)=(B(2)-A(2,3)*x(3))/A(2,2)
x(1)=(B(1)-A(1,2)*x(2)-A(1,3)*x(3))/A(1,1)
Do 40,i = 1,3
print*,x(i)
40 continue
end
结果还是不对啊
4 楼
艾瑞达a [专家分:0] 发布于 2011-10-20 13:11:00
program ex123
implicit none
integer i,j,k
real A(3,3),B(3),x(3)
read(*,*) ((A(i,j),i=1,3),j=1,3)
read(*,*) (B(i),i=1,3)
Do 30,k = 1,2
Do 20,i = k+1,3
Do 10,j = k,3
A(i,j)=A(i,j)-A(k,j)*(A(i,k)/A(k,k))
B(i)=B(i)-B(k)*(A(i,k)/A(k,k))
10 continue
20 continue
30 continue
x(3)=B(3)/A(3,3)
x(2)=(B(2)-A(2,3)*x(3))/A(2,2)
x(1)=(B(1)-A(1,2)*x(2)-A(1,3)*x(3))/A(1,1)
Do 40,i = 1,3
print*,x(i)
40 continue
end
结果还是不对啊
5 楼
yeg001 [专家分:14390] 发布于 2011-10-20 13:11:00
2楼是不是想说相反的意思?
6 楼
dongyuanxun [专家分:7180] 发布于 2011-10-20 13:35:00
你想要什么结果
你又没说你的测试用例
万一有大数除小数,让人情何以堪
7 楼
艾瑞达a [专家分:0] 发布于 2011-10-20 13:52:00
A=[1 1 1;2 -3 1;4 -6 3]
B=[2;11;10]
正确解应为 【13 1-12】
8 楼
艾瑞达a [专家分:0] 发布于 2011-10-20 13:53:00
已将A,B数组定义位实数
9 楼
yeg001 [专家分:14390] 发布于 2011-10-20 19:32:00
求解线性方程的算法我也不记得了. 也不知道你用什么算法. 我觉得是不是你代码写错了而已
例如一个很疑惑的地方
Do 10,j = k,3
A(i,j)=A(i,j)-A(k,j)*(A(i,k)/A(k,k))
B(i)=B(i)-B(k)*(A(i,k)/A(k,k))
10 continue
在j循环下求B(i), 但整一行代码就没有出现一个j, 觉得不合理. 顺便说, DO循环完全可以用
DO j = k,3
A(i,j)=A(i,j)-A(k,j)*(A(i,k)/A(k,k))
B(i)=B(i)-B(k)*(A(i,k)/A(k,k))
ENDDO
continue什么的有点老代码的感觉. 只是意见, 不喜欢也没关系.
10 楼
yeg001 [专家分:14390] 发布于 2011-10-20 19:33:00
发帖再次出现乱码. notepad++ 显示楼主代码很多问号... 郁闷.
我来回复