📜  MATLAB Gauss和Gauss-Jordan消除(1)

📅  最后修改于: 2023-12-03 14:44:10.975000             🧑  作者: Mango

MATLAB Gauss和Gauss-Jordan消除

在数值计算中,高斯消元法和高斯-约旦消元法是求解线性方程组的两种基本方法。这两种方法都是通过对增广矩阵的行变换来消元,最终得到行简化阶梯形矩阵。其中,高斯-约旦消元法相对于高斯消元法,省略了很多步骤,更为简单。下面,我们来介绍如何在MATLAB中实现这两种方法。

1. 高斯消元法的MATLAB实现

高斯消元法将增广矩阵的第一列消元成一个上三角矩阵,然后继续对第二列进行消元,一直消元到最后一列。简化后的增广矩阵由此变为一个行阶梯形矩阵,最后通过回带法求得解。

1.1 高斯消元法的MATLAB代码
function [X] = gauss_elimination(A,b)
% 高斯消元法求解线性方程组Ax=b
% 输入参数:
% A:系数矩阵
% b:常数向量
% 输出参数:
% X:方程组的解

[m,n] = size(A);
if m ~= n
    error('系数矩阵A必须是方阵!');
end

A = [A,b];  % 构造增广矩阵
for k = 1:n-1
    for i = k+1:n
        factor = A(i,k) / A(k,k);
        A(i,k:n+1) = A(i,k:n+1) - factor * A(k,k:n+1);
    end
end

if abs(A(n,n)) < eps
    error('系数矩阵A的行列式为0,无法求解!');
end

X = zeros(n,1);
X(n) = A(n,n+1) / A(n,n);
for i = n-1:-1:1
    X(i) = (A(i,n+1) - A(i,i+1:n)*X(i+1:n)) / A(i,i);
end
1.2 高斯消元法的使用示例

假设有如下线性方程组:

$$ \left{ \begin{aligned} 3x_1 + 2x_2 - x_3 &= 10 \ 2x_1 - 2x_2 + 4x_3 &= 8 \ -x_1 + \frac{1}{2}x_2 - x_3 &= -5 \end{aligned} \right. $$

我们可以使用如下MATLAB代码求解:

A = [3, 2, -1; 2, -2, 4; -1, 1/2, -1];
b = [10; 8; -5];
X = gauss_elimination(A,b)

结果为:

X =
    3.0000
    1.0000
    2.0000
2. 高斯-约旦消元法的MATLAB实现

高斯-约旦消元法相较于高斯消元法,少了一部分消元的过程。其核心思想是化简增广矩阵的每一行,使其成为一个单位向量,从而得到简化的增广矩阵。最终,通过回带法求解出方程组的解。

2.1 高斯-约旦消元法的MATLAB代码
function [X] = gauss_jordan_elimination(A,b)
% 高斯-约旦消元法求解线性方程组Ax=b
% 输入参数:
% A:系数矩阵
% b:常数向量
% 输出参数:
% X:方程组的解

[m,n] = size(A);
if m ~= n
    error('系数矩阵A必须是方阵!');
end

A = [A,b];  % 构造增广矩阵
for k = 1:n
    if abs(A(k,k)) < eps
        error('系数矩阵A的行列式为0,无法求解!');
    end
    A(k,k:n+1) = A(k,k:n+1) / A(k,k);  % 将第k行变为单位向量
    for i = [1:k-1,k+1:n]
        factor = A(i,k);
        A(i,k:n+1) = A(i,k:n+1) - factor * A(k,k:n+1);
    end
end

X = A(:,n+1);
2.2 高斯-约旦消元法的使用示例

与上例相同,我们可以使用如下MATLAB代码求解:

A = [3, 2, -1; 2, -2, 4; -1, 1/2, -1];
b = [10; 8; -5];
X = gauss_jordan_elimination(A,b)

结果仍为:

X =
    3.0000
    1.0000
    2.0000
3. 总结

高斯消元法和高斯-约旦消元法都是求解线性方程组的常用方法,在MATLAB中也有相应的实现。两种方法的区别在于高斯-约旦消元法省略了一部分消元的过程,更为简单。在实际应用中,可以根据具体情况选择相应的方法进行求解。