pinv
Moore-Penrose 伪逆
说明
B = pinv(
返回矩阵 A
)A
的 Moore-Penrose 伪逆。
示例
使用伪逆求解线性方程组
比较通过反斜杠 (\
) 和 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
输入参数
A
— 输入矩阵
矩阵
输入矩阵。
数据类型: single
| double
复数支持: 是
tol
— 奇异值容差
标量
奇异值容差,指定为标量。在计算伪逆时,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)
的部分(但非全部)属性:
伪逆计算基于 svd(A)
。该计算将小于 tol
的奇异值视为零。
提示
您可以将应用于向量
b
的大部分pinv
(比如在pinv(A)*b
中)替换为lsqminnorm(A,b)
,以计算线性方程组的最小范数最小二乘解。lsqminnorm
通常比pinv
更有效,而且还支持稀疏矩阵。
算法
pinv
通过奇异值分解来形成 A
的伪逆。S
对角线上小于 tol
的奇异值被视为零,而 A
的表示变成:
因此 A
的伪逆等于:
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2021b: pinv
在输入为非有限时返回 NaN
当输入包含非有限值(Inf
或 NaN
)时,pinv
返回 NaN
值。以前,pinv
在输入包含非有限值时会引发错误。
另请参阅
inv
| qr
| rank
| svd
| lsqminnorm
| decomposition
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)