Skip to content

MATLAB - 行最简形

**简化行阶梯形(Reduced Row Echelon Form, RREF)**是矩阵的一种独特形式,对于求解线性方程组和理解线性代数中的矩阵特性至关重要。它通过对矩阵应用一系列初等行变换得到。MATLAB 的内置 rref 函数提供了一种强大且数值稳定的方法来计算它。

如果一个矩阵满足以下所有条件,则它处于简化行阶梯形(RREF):

  • 主元 1(Leading 1s):每个非零行中的第一个非零元素(称为主元)必须是 1。
  • 主元列(Pivot Columns):每个主元(主元 1)是其所在列中唯一的非零元素。
  • 阶梯形模式(Staircase Pattern):任意行中的主元总是在其上方行的主元的右侧。
  • 零行(Zero Rows):所有只包含零的行都位于矩阵的底部。

理解高斯-约旦消元法的手动步骤有助于理解 rref 函数的作用。让我们找出矩阵 A 的 RREF:

$$ A = \begin{bmatrix} 1 & 2 & 1 \ 2 & 4 & -3 \ 3 & 6 & 4 \end{bmatrix} $$

步骤 1:第一个主元已经为 1。使用它在其下方创建零。

$$ R_2 \leftarrow R_2 - 2 \times R_1 \implies \begin{bmatrix} 1 & 2 & 1 \ 0 & 0 & -5 \ 3 & 6 & 4 \end{bmatrix} $$

$$ R_3 \leftarrow R_3 - 3 \times R_1 \implies \begin{bmatrix} 1 & 2 & 1 \ 0 & 0 & -5 \ 0 & 0 & 1 \end{bmatrix} $$

步骤 2:移到下一个主元。下一个可用的主元在第三列。让我们将其变为 1(在 R3 中它已经是 1)。交换 R2 和 R3 以获得阶梯形。

$$ R_2 \leftrightarrow R_3 \implies \begin{bmatrix} 1 & 2 & 1 \ 0 & 0 & 1 \ 0 & 0 & -5 \end{bmatrix} $$

步骤 3:使用 R2 中的新主元在其上方和下方创建零。

$$ R_1 \leftarrow R_1 - 1 \times R_2 \implies \begin{bmatrix} 1 & 2 & 0 \ 0 & 0 & 1 \ 0 & 0 & -5 \end{bmatrix} $$

$$ R_3 \leftarrow R_3 + 5 \times R_2 \implies \begin{bmatrix} 1 & 2 & 0 \ 0 & 0 & 1 \ 0 & 0 & 0 \end{bmatrix} $$

结果矩阵现在处于 RREF 形式。

MATLAB 通过 rref 函数自动化了整个过程。

R = rref(A)
[R, p] = rref(A)
R = rref(A, tol)
  • R = rref(A):返回矩阵 A 的 RREF,使用高斯-约旦消元法和部分主元法以确保数值稳定性。
  • [R, p] = rref(A):除了返回 RREF 外,还返回一个包含主元列索引的向量 p。
  • R = rref(A, tol):使用指定的容差 tol 来确定哪些元素可以忽略并应被视为零。这对于处理可能存在浮点数不精确性的实际数据至关重要。

考虑以下系统: 2x + 4y = 10 4x + 9y = 19

% 定义增广矩阵 [系数 | 常数]
A = [2 4 10; 4 9 19];
% 计算简化行阶梯形
R = rref(A);
% 显示结果
disp('The Augmented Matrix:');
disp(A);
disp('The RREF is:');
disp(R);

输出:

The Augmented Matrix:
2 4 10
4 9 19
The RREF is:
1 0 7
0 1 -1

RREF [1 0 | 7; 0 1 | -1] 转换回方程为:

  • 1x + 0y = 7 => x = 7
  • 0x + 1y = -1 => y = -1

这是一个具有唯一解的系统。

浮点数可能引入小误差。tol 参数帮助 rref 区分显著值和数值噪声。

% 一个近似秩亏的矩阵
A = [1 2 3; 2 4 6.000001; 3 6 9];
% --- 使用默认(小)容差 ---
% 微小的差异被认为是显著的。
R_low_tol = rref(A);
disp('RREF with default low tolerance:');
disp(R_low_tol);
% --- 使用较大的容差 ---
% 微小的差异被视为零。
tol = 1e-5; % 任何小于此值的内容都将被视为 0
R_high_tol = rref(A, tol);
disp('RREF with higher tolerance of 1e-5:');
disp(R_high_tol);

输出:

RREF with default low tolerance:
1 2 0
0 0 1
0 0 0
RREF with higher tolerance of 1e-5:
1 2 3
0 0 0
0 0 0

除了求解线性系统,RREF 还用于:

  • 查找矩阵的秩:秩是其 RREF 中非零行(或主元)的数量。
  • 查找零空间(核)的基:通过使用 A 的 RREF 求解系统 Ax=0。
  • 确定向量集的线性无关性。