目录
语法
说明
示例
使用伪逆求解线性方程组
pinv的功能是得到矩阵的Moore-Penrose 伪逆。
语法
B = pinv(A)
B = pinv(A,tol)
说明
B = pinv(A) 返回矩阵 A 的 Moore-Penrose 伪逆。
B = pinv(A,tol) 指定容差的值。pinv 将 A 中小于容差的奇异值视为零。
示例
使用伪逆求解线性方程组
比较通过反斜杠 (\) 和 pinv 求得的线性方程组的解。
如果矩形系数矩阵 A 低秩,则使 norm(A*x-b) 最小化的最小二乘问题将有无限多个解。x1 = A\b 和 x2 = 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
提示
-
可以将应用于向量 b 的大部分 pinv(比如在 pinv(A)*b 中)替换为 lsqminnorm(A,b),以计算线性方程组的最小范数最小二乘解。lsqminnorm 通常比 pinv 更有效,而且还支持稀疏矩阵。
算法
pinv 通过奇异值分解来形成 A 的伪逆。S 对角线上小于 tol 的奇异值被视为零,而 A 的表示变成:
因此 A 的伪逆等于: