Main Content

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 求解线性方程组问题。

详细信息

全部折叠

部分主元消去法

部分主元消去法的做法是在主元列中选择具有最大绝对值的列元素,然后交换矩阵的行以使该元素处于主元位置(行中最左边的非零元素)。

例如,在以下矩阵中,算法首先确定第一列中的最大值((2,1) 位置中的值,等于 1.1),然后交换完整的第一行和第二行,使该值出现在 (1,1) 位置。

3-by-3 matrix. The first row has values of 0.5, 1.4, and 2. The second row has values of 1.1, 0.3, and 0.1. The third row has values of 0.2, 5, and 0.5.

在高斯消去法中使用部分主元消去法可减少(但会不消除)计算中的舍入误差。

简化行阶梯形矩阵形式

满足以下条件时,矩阵为行阶梯形式

  • 所有非零行都在全部为零的行之上。

  • 每一行的首项系数严格位于其上一行的首项系数的右侧。

行阶梯形式的矩阵的示例如:

A=(123041002).

简化行阶梯形式的另一项要求是:

  • 每个首项系数必须为 1,并且必须是其列中唯一的非零值。

虽然单位矩阵最常与简化行阶梯形式相关联,但也可与其他形式相关联。另一个简化行阶梯形式的矩阵的示例如:

A=(1001010300130000).

算法

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

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| | |