本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

rref

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

语法

R = rref(A)
R = rref(A,tol)
[R,p] = rref(A)

说明

示例

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 幻方矩阵。在矩阵的末尾添加一个额外的列。此增广矩阵表示线性方程组 ,其中额外的列对应于

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)

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

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

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

例如,如果 ,则

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

输入参数

全部折叠

输入矩阵。

数据类型: 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) 位置。

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

简化行阶梯形矩阵形式

矩阵符合以下特征时为行阶梯形式

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

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

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

A=(123041002).

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

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

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

A=(1001010300130000).

算法

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

另请参阅

| | |

在 R2006a 之前推出