MATLAB实验一 解线性方程组的直接法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附:高斯列主消去法源程序代码
function [x,det,index]=Gauss(A,b)
% ÇóÏßÐÔ·½³Ì×éµÄÁÐÖ÷ÔªGaussÏûÈ¥·¨£¬ÆäÖÐ
% A --- 方程组矩阵
% b --- 方程组右端
% x --- 方程组的解
% det ---方程组行列式
% index --- index=0表示求解失败,index=1表示求解成功¦
[n,m]=size(A); nb=length(b);
if n~=m
error('The rows and columns of matrix A must be equal!');
return;
end
if m~=nb
error('The columns of A must be equal the dimension of b!');
return;
end
index=1; det=1; x=zeros(n,1);
for k=1:n-1
% 选主元
a_max=0;
for i=k:n
if abs(A(i,k))>a_max
a_max=abs(A(i,k)); r=i;
end
end
if a_max<1e-20
index=0;
return;
end
% 交换两行
if r>k
for j=k:n
z=A(k,j); A(k,j)=A(r,j); A(r,j)=z;
end
z=b(k); b(k)=b(r); b(r)=z; det=-det;
end
% 消元过程
for i=k+1:n
m=A(i,k)/A(k,k);
for j=k+1:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*A(k,k);
end
det=det*A(n,n);
% 回代过程
if abs(A(n,n))<1e-20
index=0;
return;
end
for k=n:-1:1
for j=k+1:n
b(k)=b(k)-A(k,j)*x(j);
end
x(k)=b(k)/A(k,k);
end