针对齐次方程组
解线性方程组AX=b
采用高斯列主元方法为:
k=1:n-1时
k=n时
重点理解矩阵的乘法
%高斯消元法
%列主元素消元法,主元的选择是在对角线下方元素包括对角元元素
%注意b和解的向量都是列向量,同时矩阵的乘法就是线性方程组的表示方法
clear;
A=[1,2,1,-2;2,5,3,-2;-2,-2,3,5;1,3,2,5];
b=[-1;3;15;9];
[n,cl]=size(A);
x=zeros(n,1);
for k=1:n-1
[prime,maxk]=max(abs(A(k:n,k)));%在第k列在对角元包括对角元下面寻找主元
maxk=maxk+k-1;
if prime<=eps
disp('无解!!!');%结束
else
%换行
temp=A(k,1:cl);
A(k,1:cl)=A(maxk,1:cl);
A(maxk,1:cl)=temp;
temp1=b(k);
b(k)=b(maxk);
b(maxk)=temp1;
clear temp1,temp;
%消元分系数矩阵A和b消元,从第k+1行开始计算
b(k+1:n,1)=b(k+1:n,1)-A(k+1:n,k)/A(k,k)*b(k,1);
A(k+1:n,1:cl)=A(k+1:n,1:cl)-(A(k+1:n,k)/A(k,k))*A(k,1:cl);
end
end
if(k+1==n)
if abs(A(k,k))<=eps
disp('无解!!!');
else
%回代求解
x(n,1)=b(n,1)/A(n,n);
for i=n-1:-1:1
x(i,1)=(b(i,1)-A(i,i+1:n)*x(i+1:n,1))/A(i,i);
end
disp(x);
end
end
总结:
列高斯消元法本质也是消元法,因为考虑到在计算机执行算法时如果选取的是小主元,在消元时会除以小主元而产生很高的误差,所以在每次消元之前选取绝对值最大的主元。