刚开始编程望各位大侠帮忙指正
function x=naivgauss(A,b);n=length(b); x=zeros(n,1);
for k=1:n-1
for i=k+1:n
for j=k+1:n
xmult=A(i,k)/A(k,k)
A(i,j)=A(i,j)-xmult*A(i,j);
end
b(i)=b(i)-xmult*b(k);
end
end
% back substitution
x(n)=b(n)/A(n,n);
for i=n-1:-1:1
sum=b(i);
for j=i+1:n
sum=sum-A(i,j)*x(j);
end
x(i)=sum/A(i,j);
end
A=;
b=;
naivgauss(A,b)
xmult =
-1000
xmult =
-1000
xmult =
-2000
xmult =
-2000
xmult =
0.5773
ans =
0.0895
-0.0819
0.2985
事实上 用高斯消去法答案应该为-0.400 -0.09980 0.4000 且xmult 应该为三个值才对啊怎么冒出5个 不知道哪里不行 刚开始编程望各位大侠帮忙指正!!!谢了先。
[ 本帖最后由 xinyuxf 于 2007-7-22 16:13 编辑 ] xmult出来的值是由于你的程序中
xmult=A(i,k)/A(k,k)
后边没有加分号造成的
改成
xmult=A(i,k)/A(k,k);
就好了
你的结果应该是ans给出来的三个值
至于和高斯消去法对不上,可能原因很多,说说你用的是什么算法吧
检查一下程序是否有什么地方搞错了
麻烦看下 是不是循环语句出错了? 谢谢 (在线等!)
哦 谢谢 我的是用高斯顺序消去法(非选主元),为了看出哪里出问题,我特意将xmult,A都打出来。但是,程序出来后,在for j=k+1:nxmult=A(i,k)/A(k,k)
A(i,j)=A(i,j)-xmult*A(i,j); k列一直无法消去。将j=k+1:n改成j=k:n还是没办法消去k列(k列下三角应为零)。程序运行如下:
formatlong;
A=;
b=;
naivgauss(A,b)
A =
1.0e+003 *
0.00000100000000 0.00200000000000 0.00300000000000
-0.00100000000000 2.00371200000000 0.00462300000000
-0.00200000000000 0.00107200000000 0.00564300000000
A =
1.0e+003 *
0.00000100000000 0.00200000000000 0.00300000000000
-0.00100000000000 2.00371200000000 3.00462300000000
-0.00200000000000 0.00107200000000 0.00564300000000
A =
1.0e+003 *
0.00000100000000 0.00200000000000 0.00300000000000
-0.00100000000000 2.00371200000000 3.00462300000000
-0.00200000000000 4.00107200000000 0.00564300000000
A =
1.0e+003 *
0.00000100000000 0.00200000000000 0.00300000000000
-0.00100000000000 2.00371200000000 3.00462300000000
-0.00200000000000 4.00107200000000 6.00564300000000
A =
1.0e+003 *
0.00000100000000 0.00200000000000 0.00300000000000
-0.00100000000000 2.00371200000000 3.00462300000000
-0.00200000000000 4.00107200000000 0.00592200424013
ans =
-0.01149748295673
-0.03403415510089
0.36752025302399
页:
[1]