高斯消元法解线性方程组:Matlab代码逐行详解
该函数为高斯消元法解线性方程组的实现。下面逐行解释每一行代码的作用:
-
function x=Gauss(A,b)定义函数名为Gauss,输入参数为系数矩阵A和常数向量b,输出为解向量x。 -
[n,n] = size(A);获取矩阵A的行数和列数,因为高斯消元法只适用于方阵,所以这里只需要获取行数n。 -
x = zeros(n,1);初始化解向量x为n行1列的零向量。 -
Aug = [A,b];将系数矩阵A和常数向量b拼接成增广矩阵Aug。 -
for k = 1:n-1进行n-1轮消元操作,每一轮确定一个主元。 -
[piv,r] = max(abs(Aug(k:n,k)));找出第k列及其下面的行中最大的元素的绝对值,r为该元素所在的行。 -
r = r + k - 1;将r转换为在增广矩阵中的行数。 -
if r>k若找到的主元不在第k行,则交换第k行和主元所在行r的位置。 -
if Aug(k,k)==0若对角元为0,则无法进行消元,抛出异常。 -
for p = k+1:n将第k行以下的所有行做消元操作,将增广矩阵化为上三角矩阵。 -
A = Aug(:,1:n);将消元后的增广矩阵拆分为系数矩阵A和常数向量b。 -
b = Aug(:,n+1);同上。 -
x(n) = b(n)/A(n,n);最后一行的解为常数向量b的最后一个元素除以A的最后一个对角元素。 -
for k = n-1:-1:1从倒数第二行开始,逐行求解解向量x。 -
x(k) = (b(k)-A(k,n:-1:k+1)*x(n:-1:k+1))/A(k,k);利用前面已求出的解向量x,求解第k行的解。
原文地址: https://www.cveoy.top/t/topic/n1Na 著作权归作者所有。请勿转载和采集!