matlab中用的高斯消元法怎么使用!
mip版 关注:201 答案:3 悬赏:30
解决时间 2021-01-25 19:12
已解决
2021-01-25 12:40
老师给我们一个程序让我们测试:
function x=Gauss(A,b)
m=size(A,1);
n=size(A,2);
mb=size(b,1);
nb=size(b,2);
if m>n
printf('该矩阵所对应的方程组无解')
elseif m
printf('该矩阵所对应的方程组有无穷多解')
else
if m==mb
for k=1:n-1
if A(k,k)==0
printf('主元素为零'),
break;
else
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);
end
end
end
end
end
end
for k=1:(n-1)
for i=(k+1):n
for j=1:nb
b(i,j)=b(i,j)-b(k,j)*A(i,k);
end
end
end
if A(n,n)==0
printf('该矩阵为奇异矩阵,无法进行回代过程');
else for j=1:nb
b(m,j)=b(m,j)/A(n,n);
end
for i=1:(n-1)
i=n-i;
for j=1:nb
for j1=(i+1):n
b(i,j)=b(i,j)-A(i,j1)*b(j1,j);
end
b(i,j)=b(i,j)/A(i,i);
end
end
end
x=b;
end
这个程序使用时出现Undefined function 'Guass' for input arguments of type 'double'.怎么解决!
最佳答案
2021-01-25 13:52
用matlab实现高斯列主元消去法解线性方程及LU分解
function x=gaussLinearEquation(A,b)
%高斯法解线性方程Ax=b
disp('原方程为AX=b:')
A
b
disp('------------------------')
n=length(b);
eps=10^-2;
for k=1:n-1
%找列主元
[mainElement,index]=max(abs(A(k:n,k)));
index=index+k-1;%index在A(k:n,k)中的行号转换为在A中的行号
if abs(mainElement)
disp('列元素太小!!');
break;
elseif index>k
%列主元所在行不是当前行,将当前行与列主元所在行交换
temp=A(k,:);
A(k,:)=A(index,:);
A(index,:)=temp;
end
%消元
for i=k+1:n
m(i,k)=A(i,k)/A(k,k);%A(k,k)将A(i,k)消为0所乘系数
A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n);%第i行消元处理
b(i)=b(i)-m(i,k)*b(k);%还有b也需要处理!!
end
end
disp('消元后所得到的上三角阵是')
A
%回代
b(n)=b(n)/A(n,n);
for i=n-1:-1:1
%sum(A(i,i+1:n).*b(i+1:n)')表示已知
b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)'))/A(i,i);
end
clear x;
x=b;
disp('AX=b的解x是')
x
用法:
在控制台输入:
A=[1.003 0.333 1.504 -0.333;
-2.011 1.455 0.506 2.956;
4.329 -1.952 0.006 2.087;
5.113 -4.004 3.332 -1.112];
b=[ 3.005,5.407,0.136,3.772 ]';
执行gaussLinearEquation(A,b);即可得到结果。
全部回答
1楼
2021-01-25 14:54
程序没啥问题,如:A=magic(5);
b=[1:5]';
x=Gauss(A,b)
x =
0.0128
0.0128
0.1795
0.0128
0.0128
2楼
2021-01-25 14:29
function [x]=gaussian(a,b,n)
c=[a b];
for i=2:n
[r,c]=max(abs(c(i-1:n,i-1)));
vec=c(i-1,:);c(i-1,:)=c(c+i-2,:);c(c+i-2,:)=vec;
if c(i-1,i-1)==0
return
end
for k=(i-1):(n-1)
c(k+1,:)=c(i-1,:)*-c(k+1,i-1)/c(i-1,i-1)+c(k+1,:);
end
end
d=c;
b2=c(:,n+1);
d(:,n+1)=[];
x=zeros(1,n);
for i=1:n
x(n+1-i)=(b2(n+1-i)-d(n+1-i,:)*x')/c(n+1-i,n+1-i);
end
=============================
运行:
>>a=[10,-1,2,0;-1,11,-1,3;2,-1,10,-1;0,3,-1,8];
>>b=[6,25,-11,15]';
>>gaussian(a,b,4)
ans =
1.0000 2.0000 -1.0000 1.0000
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看