主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

rref

简化的行阶梯形矩阵(Gauss-Jordan 消去法)

说明

R = rref(A) 使用 Gauss-Jordan 消去法和部分主元消去法返回简化行阶梯形A

示例

R = rref(A,tol) 指定算法用于确定可忽略列的主元容差。

[R,p] = rref(A) 还返回非零主元 p

示例

示例

全部折叠

创建一个矩阵并计算简化行阶梯形矩阵。在这种形式中,矩阵在每列的主元位置具有前导 1。

A = magic(3)
A = 3×3

     8     1     6
     3     5     7
     4     9     2

RA = rref(A)
RA = 3×3

     1     0     0
     0     1     0
     0     0     1

3×3 幻方矩阵为满秩,因此简化行阶梯形矩阵是单位矩阵。

现在,计算 4×4 幻方矩阵的简化行阶梯形矩阵。指定两个输出以返回非零主元列。由于该矩阵秩亏,因此结果不是单位矩阵。

B = magic(4)
B = 4×4

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

[RB,p] = rref(B)
RB = 4×4

     1     0     0     1
     0     1     0     3
     0     0     1    -3
     0     0     0     0

p = 1×3

     1     2     3

对增广矩阵使用 Gauss-Jordan 消去法来求解线性系统并计算逆矩阵。这些方法主要用于学术研究,因为有更高效和数值稳定的方法来计算这些值。

创建一个 3×3 幻方矩阵。在矩阵的末尾添加一个额外的列。此增广矩阵表示线性系统 Ax=b,其中额外的列对应于 b

A = magic(3);
A(:,4) = [1; 1; 1]
A = 3×4

     8     1     6     1
     3     5     7     1
     4     9     2     1

计算 A 的简化行阶梯形矩阵。对 R 进行索引以提取该额外(增广)列中的项,该列包含线性系统的解。

R = rref(A)
R = 3×4

    1.0000         0         0    0.0667
         0    1.0000         0    0.0667
         0         0    1.0000    0.0667

x = R(:,end)
x = 3×1

    0.0667
    0.0667
    0.0667

求解此线性系统的更高效方法是使用反斜杠运算符,即 x = A\b

创建一个类似的幻方矩阵,但这次在末尾列追加一个相同大小的单位矩阵。

A = [magic(3) eye(3)]
A = 3×6

     8     1     6     1     0     0
     3     5     7     0     1     0
     4     9     2     0     0     1

计算 A 的简化行阶梯形矩阵。在此形式中,额外的列包含该 3×3 幻方矩阵的逆矩阵。

R = rref(A)
R = 3×6

    1.0000         0         0    0.1472   -0.1444    0.0639
         0    1.0000         0   -0.0611    0.0222    0.1056
         0         0    1.0000   -0.0194    0.1889   -0.1028

inv_A = R(:,4:end)
inv_A = 3×3

    0.1472   -0.1444    0.0639
   -0.0611    0.0222    0.1056
   -0.0194    0.1889   -0.1028

计算逆矩阵的更高效方法是使用 inv(A)

以一个包含四个方程和三个未知数的线性系统为例。

x1+x2+5x3=62x1+x2+8x3=8x1+2x2+7x3=10-x1+x2-x3=2.

创建一个表示该方程组的增广矩阵。

A = [1  1  5;
     2  1  8;
     1  2  7;
    -1  1 -1];
b = [6 8 10 2]';
M = [A b];

使用 rref 以简化行阶梯形矩阵表示该方程组。

R = rref(M)
R = 4×4

     1     0     3     2
     0     1     2     4
     0     0     0     0
     0     0     0     0

R 的前两行包含表示 x1x2 关于 x3 的方程。接下来的两行表示存在至少一个适合右侧向量的解(否则其中一个方程将显示为 1=0)。第三列不包含主元,因此 x3 是自变量。因此,x1x2 的解有无限多个,可以自由选择 x3

x1=2-3x3x2=4-2x3.

例如,如果 x3=1,则 x1=-1x2=2

从数值的角度来看,求解该方程组的更高效方法是使用 x0 = A\b,此方法(对于矩形矩阵 A)计算最小二乘解。在这种情况下,您可以使用 norm(A*x0-b)/norm(b) 检查解的精确度,通过检查 rank(A) 是否等于未知数的数目来确定解的唯一性。如果存在多个解,则它们都具有 x=x0+nt 形式,其中 n 是零空间 null(A)t 可以自由选择。

输入参数

全部折叠

输入矩阵。

数据类型: single | double
复数支持:

主元容差,指定为标量。如果主元列中的最大元素(按绝对值)低于容差,则该列将归零。这可以防止使用小于容差的非零主元元素进行除法和乘法。

数据类型: single | double

输出参量

全部折叠

A简化行阶梯形矩阵形式,以矩阵形式返回。

非零主元列,以向量形式返回。p 中的每个元素均为 A 的列索引。您可以使用 p 估算下面几个量:

  • length(p)A 的秩的估计值。

  • x(p) 包含线性系统 Ax = b 中的主元变量。

  • A(:,p)A 范围的依据。

  • R(1:r,p)r×r 单位矩阵,其中 r = length(p)

局限性

  • 对于计算矩阵的秩和基向量,rankorthnull 通常更快、更准确。

  • 建议使用 mldivide 求解线性系统问题。

详细信息

全部折叠

算法

rref 通过部分主元消去法实现 Gauss-Jordan 消去法。(max(size(A))*eps*norm(A,inf)) 的默认容差检验可忽略不计的列元素,这些列元素会归零以减少舍入误差。

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

另请参阅

| | |