一、概述
高斯消去法是一种求解线性方程组的算法。其本质是将线性方程组的增广矩阵转化为行阶梯矩阵
二、原理
已知线性方程组
A
x
=
b
Ax=b
Ax=b 写出增广矩阵
(
A
∣
b
)
(A|b)
(A∣b) 将其转化为上三角矩阵
(
A
1
∣
b
1
)
(A^1|b^1)
(A1∣b1)
(
A
1
∣
b
1
)
=
(
a
11
a
12
?
a
1
n
b
1
a
22
?
a
2
n
b
2
?
?
?
a
n
n
b
n
)
(A^1|b^1)= \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n}&b_1\\ & a_{22} & \cdots & a_{2n}&b_2\\ && \ddots & \vdots & \vdots \\ & &&a_{nn}&b_n\\ \end{pmatrix}
(A1∣b1)=??????a11??a12?a22??????a1n?a2n??ann??b1?b2??bn???????? 由该行阶梯矩阵很容易求出解向量
x
x
x 这个过程称为顺序的高斯消元法 实现该过程的MATLAB代码如下:
clear,clc
%消元过程
n=input('请输入系数矩阵的阶数 n:');
A=input('请输入系数矩阵A:');
b=input('请输入b:');
for i=1:n-1
A(i+1:n,i)=A(i+1:n,i)/A(i,i); %消元因子
A(i+1:n,i+1:n)=A(i+1:n,i+1:n)-A(i+1:n,i)*A(i,i+1:n);%化成上三角矩阵U
b(i+1:n,1)=b(i+1:n,1)-b(i,1)*A(i+1:n,i);
end
%回代过程
n=n;
U=A;%保存A这个矩阵
b=b;
for j =n:-1:2
b(j)=b(j)/U(j,j);
b(1:j-1)=b(1:j-1)-b(j)*U(1:j-1,j);
end
b(1)=b(1)/U(1,1);
A %此时A的下三角矩阵为L,上三角矩阵为U,实现LU三角分解
b%b为线性方程组的解
三、高斯列主元消去法
当出现零主元或小主元时,消元或不可行或数值不稳定,此时需要对原有的高斯消去法进行改进 在将增广矩阵转化为行阶梯矩阵的过程中,每一列选择绝对值最大的元素作为主元素进行消元 实现该过程的MATLAB代码如下:
clear,clc
%消元过程
n=input('请输入系数矩阵的阶数 n:');
A=input('请输入系数矩阵A:');
b=input('请输入b:');
c=zeros(1,n);
d=0;
for i=1:n-1
[max_a,k]=max(abs(A(i:n,i)));
k=k+i-1;%找出列主元
c=A(k,:);
A(k,:)=A(i,:);
A(i,:)=c;
d=b(k,1);
b(k,1)=b(i,1);
b(i,1)=d;%行交换
A(i+1:n,i)=A(i+1:n,i)/A(i,i); %消元因子
A(i+1:n,i+1:n)=A(i+1:n,i+1:n)-A(i+1:n,i)*A(i,i+1:n);
b(i+1:n,1)=b(i+1:n,1)-b(i,1)*A(i+1:n,i);
end
%回代过程
n=n;
U=A;%保存A这个矩阵
b=b;
for j =n:-1:2
b(j)=b(j)/U(j,j);
b(1:j-1)=b(1:j-1)-b(j)*U(1:j-1,j);
end
b(1)=b(1)/U(1,1);
A
b%b为线性方程组的解
PS:特别感谢用户稳柱能赢对高斯列主元消去法MATLAB实现代码提供的帮助
|