matlab中用的高斯消元法怎么使用!
老师给我们一个程序让我们测试:functionx=Gauss(A,b)m=size(A,1);n=size(A,2);mb=size(b,1);nb=size(b,2);...
老师给我们一个程序让我们测试:
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<n
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'.怎么解决! 展开
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<n
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'.怎么解决! 展开
3个回答
展开全部
用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)<eps
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);即可得到结果。
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)<eps
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);即可得到结果。
富港检测东莞有限公司
2024-12-25 广告
2024-12-25 广告
正弦振动多用于找出产品设计或包装设计的脆弱点。看在哪一个具体频率点响应最大(共振点);做正弦振动找富港,富港工业检测技术有限公司是一家专业的第三方检测机构,拥有完善的质量管理体系,先进的检测设备,优秀的技术人才;已取得CNAS、CMA、IS...
点击进入详情页
本回答由富港检测东莞有限公司提供
展开全部
程序没啥问题,如:A=magic(5);
b=[1:5]';
x=Gauss(A,b)
x =
0.0128
0.0128
0.1795
0.0128
0.0128
b=[1:5]';
x=Gauss(A,b)
x =
0.0128
0.0128
0.1795
0.0128
0.0128
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询