Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

pinv

Moore-Penrose 伪逆

说明

示例

B = pinv(A) 返回矩阵 AMoore-Penrose 伪逆

B = pinv(A,tol) 指定容差的值。pinvA 中小于容差的奇异值视为零。

示例

全部折叠

比较通过反斜杠 (\) 和 pinv 求得的线性方程组的解。

如果矩形系数矩阵 A 低秩,则使 norm(A*x-b) 最小化的最小二乘问题将有无限多个解。x1 = A\bx2 = pinv(A)*b 返回两个解。这两个解具有以下特征:x1 只有 rank(A) 个非零分量,norm(x2) 是小于任何其他解的范数。

创建一个 rank(A) = 3 的 8×6 矩阵。

A = magic(8); 
A = A(:,1:6) 
A = 8×6

    64     2     3    61    60     6
     9    55    54    12    13    51
    17    47    46    20    21    43
    40    26    27    37    36    30
    32    34    35    29    28    38
    41    23    22    44    45    19
    49    15    14    52    53    11
     8    58    59     5     4    62

为方程组的右侧创建一个向量。

b = 260*ones(8,1)
b = 8×1

   260
   260
   260
   260
   260
   260
   260
   260

为右侧选择的数字 260 是 A 的 8×8 幻数和。如果 A 仍然是 8×8 矩阵,则 x 有一个解是由 1 组成的向量。如果只有六列,方程仍然是一致的,因此仍然存在解,但解并非全部由 1 组成。由于矩阵低秩,因此有无限多个解。

使用反斜杠和 pinv 求两个解。

x1 = A\b
Warning: Rank deficient, rank = 3, tol =  1.882938e-13.
x1 = 6×1

    3.0000
    4.0000
         0
         0
    1.0000
         0

x2 = pinv(A)*b
x2 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(A*x1-b)norm(A*x2-b) 仅存在舍入误差的意义上来说,这两个解都是精确的。解 x1 的特殊之处在于它只有三个非零元素。解 x2 的特殊之处在于 norm(x2) 小于其他任何解的对应值,包括 norm(x1)

norm(x1)
ans = 5.0990
norm(x2)
ans = 3.2817

输入参数

全部折叠

输入矩阵。

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

奇异值容差,指定为标量。在计算伪逆时,pinv 会将小于 tol 的奇异值视为零。

默认容差是 max(size(A))*eps(norm(A))

示例: pinv(A,1e-4)

详细信息

全部折叠

Moore-Penrose 伪逆

Moore-Penrose 伪逆是一种矩阵,可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。

对于任何矩阵 A 来说,伪逆 B 都存在,是唯一的,并且具有与 A' 相同的维度。如果 A 是方阵且非奇异,则 pinv(A) 只是一种成本比较高的计算 inv(A) 的方式。但是,如果 A 不是方阵,或者是方阵且奇异,则 inv(A) 不存在。在这些情况下,pinv(A) 拥有 inv(A) 的部分(但非全部)属性:

1.ABA=A2.BAB=B3.(AB)*=AB(ABHermitian)4.(BA)*=BA(BAHermitian)

伪逆计算基于 svd(A)。该计算将小于 tol 的奇异值视为零。

提示

  • 您可以将应用于向量 b 的大部分 pinv(比如在 pinv(A)*b 中)替换为 lsqminnorm(A,b),以计算线性方程组的最小范数最小二乘解。lsqminnorm 通常比 pinv 更有效,而且还支持稀疏矩阵。

算法

pinv 通过奇异值分解来形成 A 的伪逆。S 对角线上小于 tol 的奇异值被视为零,而 A 的表示变成:

A=USV*=[U1U2][S1000][V1V2]*A=U1S1V1*.

因此 A 的伪逆等于:

B=V1S11U1*.

扩展功能

另请参阅

| | | | |

在 R2006a 之前推出