关于matlab的一个小程序,谁能给一点指点,愿意将我尽有的一点分都奉送
我在完成一个作业,要用matlab编一个小程序,使用高斯消去法求解线型方程组,我以前没学过matlab,所以比葫芦画瓢变了一个小文件,可是运行时总是出现这样的提示:War...
我在完成一个作业,要用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 展开
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 展开
2个回答
展开全部
【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 =
0.0000
-1.0000
1.0000
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 =
0.0000
-1.0000
1.0000
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询