关于matlab的一个小程序,谁能给一点指点,愿意将我尽有的一点分都奉送

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:12:04
我在完成一个作业,要用matlab编一个小程序,使用高斯消去法求解线型方程组,我以前没学过matlab,所以比葫芦画瓢变了一个小文件,可是运行时总是出现这样的提示:
Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In E:\matlab6.5\work\Gauss_.m at line 13
有哪位能人能帮我修改一下让它运行起来吗?很急,我愿意把我仅有的50分都奉送,我的小程序是:
function X=Gauss_(A,b)
A=[10,-7,0;5,-1,5;-3,2,6];
b=[7,6,4];
n=length(b);
for k=1:n-1 %……消去过程……
if A(k,k)==0
disp('错误信息')
break;
end
for i=k+1:n
A(i,k)=A(i,k)/A(k,k);
for j=k+1:n
A(i,j)=A(i,j)-A(i,k)/A(k,j);
b(i)=b(i)-A(i,k)*b(k);
end
end
x(n)=b(n)/A(n,n);%……回代过程……
for k=n-1:-1:1
S=b(k);
for j=k+1:n
S=S-A(k,j)*x(j);
end
x(k)=S/A(k,k);
end

end

【1】修改了一下,变动不大。

function x=Gauss_(A,b)
A=[10,-7,0;5,-1,5;-3,2,6];
b=[7;6;4]; %%%%%应该是列矩阵啊
n=length(b);
for k=1:n-1 %……消去过程……
if A(k,k)==0
disp('错误信息')
break;
end
index = [k+1:n];%用向量比用循环好
m = -A(index,k)/A(k,k); %提前定义一个较短的变量,相当于你的A(i,k)=A(i,k)/A(k,k);
A(index,index) = A(index,index) + m*A(k,index);%矩阵A消元
b(index) = b(index) + m*b(k);%矩阵b消元
end

x = zeros(n,1);%提前预置一个变量的位置,以提高运算速度
x(n) = b(n)/A(n,n);%……回代过程……
for i = n-1:-1:1
x(i) = ( b(i) - A(i,[i+1:n])*x([i+1:n]) )/A(i,i);%还是写在一起吧,比较简捷
end
x
%%%%%%%%%结束啦

运行结果:
x =

0.0000
-1.0000
1.0000

【2】验证
>> A=[10,-7,0;5,-1,5;-3,2,6];
>> b=[7;6;4];
>> X=A\b

X =

0
-1
1

【3】验证
>> Gauss_(A,b)

x =