MATLAB - 高斯消元法



高斯消元法(也称为Gaussian Elimination)是一种求解线性方程组的方法。它涉及使用一系列运算将方程组的增广矩阵转换为行阶梯形,然后进行回代以找到解。

让我们首先了解什么是增广矩阵和行阶梯形矩阵。

增广矩阵是线性代数中用于求解线性方程组的矩阵。它将方程组的系数矩阵和常数矩阵组合成一个矩阵。增广矩阵通常通过将常数列(方程的右边)附加到系数列来编写。

例如,考虑线性方程组:

$$\mathrm{2x \: + \: 3y \: = \: 5}$$

$$\mathrm{4x \: + \: 6y \: = \: 10}$$

系数矩阵 (A) 和常数矩阵 (b) 为:

$$\mathrm{A \: = \: \begin{pmatrix} 2 & 3 \\ 4 & 6 \end{pmatrix} \: , \: b \: = \: \left(\begin{array}{c}5\\ 10\end{array}\right)}$$

增广矩阵 (A|b) 是通过将 b 附加到 A 形成的:

$$\mathrm{\begin{pmatrix} 2 & 3 & | & 5 \\ 4 & 6 & | & 10\end{pmatrix}}$$

**行阶梯形 (REF)** 是线性代数中使用的矩阵的一种特定形式,用于简化求解线性方程组的过程。如果矩阵满足以下条件,则该矩阵为行阶梯形:

  • 所有非零行都在所有零行的上方。
  • 每个非零行的首个非零元素(也称为主元)为 1,并且位于其上方行的首个非零元素的右边。
  • 首个非零元素在其列中是唯一的非零元素。

这是一个 3×4 行阶梯形矩阵的示例:

$$\mathrm{\begin{pmatrix} 1 & 2 & 3 & 4 \\ 0 & 1 & 5 & 6 \\ 0 & 0 & 1 & 7\end{pmatrix}}$$

在这个例子中:

  • 第一个首个非零元素是 1,它出现在第一列。
  • 第二个首个非零元素也是 1,它出现在第一个首个非零元素的右边,在第二行和第二列。
  • 第三个首个非零元素是 1,它出现在第二个首个非零元素的右边,在第三行和第三列。
  • 所有首个非零元素下方的元素都是零。
  • 行的顺序排列,使得任何零行(如果存在)都在底部(在这个特定示例中没有零行)。

高斯消元法的步骤

考虑线性方程组:

$$\mathrm{\begin{cases} 2x \: + \: 3y \: = \: 8\\ 4x \: + \: 9y \: = \: 20\end{cases}}$$

我们可以将其写成增广矩阵形式:

$$\mathrm{\begin{bmatrix} 2 & 3 & | & 8 \\ 4 & 9 & | & 20\end{bmatrix}}$$

基于上述等式,高斯消元法的步骤如下:

1. 形成增广矩阵:

$$\mathrm{\begin{bmatrix} 2 & 3 & | & 8 \\ 4 & 9 & | & 20\end{bmatrix}}$$

2. 将第一行的首个非零元素化为 1(如果它还不是 1):

将第一行除以 2:

$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 4 & 9 & | & 20\end{bmatrix}}$$

消去第二行中的 x 项:

从第二行中减去第一行的 4 倍:

$$\mathrm{R2 \: = \: R2 \: - \: 4 \: \times \: R1}$$

$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 0 & 3 & | & 4\end{bmatrix}}$$

将第二行的首个非零元素化为 1(如果它还不是 1):

将第二行除以 3:

$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 0 & 1 & | & \frac{4}{3}\end{bmatrix}}$$

消去第一行中的 y 项:

从第一行中减去第二行的 3/2 倍。

$$\mathrm{R1 \: = \: R1 \: - \: \frac{3}{2} \: \times \: R2}$$

$$\mathrm{\begin{bmatrix} 1 & 0 & | & \frac{10}{3} \\ 0 & 1 & | & \frac{4}{3}\end{bmatrix}}$$

写出解

从最终的增广矩阵中,我们可以直接看到解。

$$\mathrm{x \: = \: \frac{10}{3} \: , \: y \: = \: \frac{4}{3}}$$

因此,方程组的解为。

$$\mathrm{x \: = \: \frac{10}{3} \: , \: y \: = \: \frac{4}{3}}$$

现在我们知道了高斯消元法的步骤,让我们尝试在matlab中做同样的事情。

MATLAB 中的高斯消元法

我们将使用的方程是。

$$\mathrm{\begin{cases} 2x \: + \: 3y \: = \: 8\\ 4x \: + \: 9y \: = \: 20\end{cases}}$$

**步骤 1** - 定义系数矩阵 A 和右端向量 b

A = [2 3; 4 9];
b = [8; 20];

**步骤 2** - 用向量 b 增广矩阵 A。

Ab = [A b];

**步骤 3** - 执行行运算以将 A 转换为上三角矩阵。

MATLAB 有一个名为 rref(简化行阶梯形)的函数,它简化了此过程。但是,如果您想手动执行这些步骤,您可以执行以下操作:

% Forward elimination
n = size(Ab, 1);
for i = 1:n-1
    for j = i+1:n
        factor = Ab(j,i) / Ab(i,i);
        Ab(j,:) = Ab(j,:) - factor * Ab(i,:);
    end
end

**步骤 4** - 向后代入以求解变量。

% Initialize the solution vector
x = zeros(n,1);

% Backward substitution
x(n) = Ab(n,end) / Ab(n,n);
for i = n-1:-1:1
    x(i) = (Ab(i,end) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i);
end

**步骤 5** - 显示结果

disp('The solution is:');
disp(x);

完整的matlab代码如下。

% Define the coefficient matrix A and the right-hand side vector b
A = [2 3; 4 9];
b = [8; 20];

% Augment the matrix A with the vector b
Ab = [A b];

% Forward elimination
n = size(Ab, 1);
for i = 1:n-1
    for j = i+1:n
        factor = Ab(j,i) / Ab(i,i);
        Ab(j,:) = Ab(j,:) - factor * Ab(i,:);
    end
end

% Initialize the solution vector
x = zeros(n,1);

% Backward substitution
x(n) = Ab(n,end) / Ab(n,n);
for i = n-1:-1:1
    x(i) = (Ab(i,end) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i);
end

% Display the result
disp('The solution is:');
disp(x);

当代码在matlab命令窗口中执行时,我们得到的输出是

The solution is:
    2.0000
    1.3333

使用 rref(简化行阶梯形)

您可以使用MATLAB内置的rref()函数来达到与下面所示相同的结果。

% Define the coefficient matrix A and the right-hand side vector b
A = [2 3; 4 9];
b = [8; 20];

% Augment the matrix A with the vector b
Ab = [A b];

% Use rref to get the Reduced Row Echelon Form
R = rref(Ab);

% Extract the solutions
x = R(:,end);

% Display the result
disp('The solution is:');
disp(x);

执行后的输出为:

The solution is:
    2.0000
    1.3333
广告