高斯列主元消去法解线性方程组的MATLAB实现
//函数gaussMain程序MATLAB代码:
function [x,detA]= gaussMain(A,b)
%gaussMain()本函数采用高斯列主元法求解方程组Ax=b,其中:
%A为所求方程组系数矩阵,并且是非奇异的;
%b为所求方程组常数项矩阵,注意:按列向量输入;
%detA为所求方程组系数矩阵的行列式。
%例如:
%在命令窗口中输入
%A=[12,-3,3;-18,3,-1;1,1,1];
%b=[15;-15;6];
%[x,detA]=gaussMain(A,b)
%则输出结果为:
%x =
%
% -0.4904
% -0.0510
% 0.3675
%
%detA =
%
% 11.8660
%
n=length(b);
detA=det(A);
d=0;
x=zeros(n,1);
c=zeros(1,n);
if abs(det(A))<=eps
error('系数矩阵是奇异的');%所求方程组系数矩阵必须是是非奇异的!
return;
end
for i=1:n-1
max=abs(A(i,i));
m=i;
%按列选主元
for j=i+1:n
if max<abs(A(j,i))
max=abs(A(j,i));
m=j;
end
end
%换行
if m~=i
for k=i:n
c(k)=A(i,k);
A(i,k)=A(m,k);
A(m,k)=c(k);
end
d=b(i);b(i)=b(m);b(m)=d;
end
%消元
for k=i+1:n
for j=i+1:n
A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
end
b(k)=b(k)-b(i)*A(k,i)/A(i,i);
A(k,i)=0;
end
end
%回代求解
x(n)=b(n)/A(n,n);
for i=n-1:(-1):1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
end
本文作者:Lyvnee
文章标题: 高斯列主元消去法解线性方程组的MATLAB实现
本文地址:https://lyvnee.com/post-23.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
本文地址:https://lyvnee.com/post-23.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。