MATLAB三角消元法,matlab中用的高斯消元法怎么使用!

matlab中用的高斯消元法怎么使用!

mip版  关注:201  答案:3  悬赏:30

解决时间 2021-01-25 19:12

46454244fb868694637024ab951eb156.png

已解决

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'.怎么解决!

最佳答案

54a3895d6a54de061aafbd0222c33c8a.png

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);即可得到结果。

全部回答

ffc5ed01a8b8f3a7f5186a9d9c2eddd5.png

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

d936085387c262171e555f4872fab09c.png

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

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值