inv
矩阵求逆
说明
示例
逆矩阵
计算一个 3×3 矩阵的逆矩阵。
X = [1 0 2; -1 5 0; 0 3 -9]
X = 3×3
1 0 2
-1 5 0
0 3 -9
Y = inv(X)
Y = 3×3
0.8824 -0.1176 0.1961
0.1765 0.1765 0.0392
0.0588 0.0588 -0.0980
检查结果。理想情况下,Y*X
将生成单位矩阵。由于 inv
使用浮点计算执行矩阵求逆,因此,实际上 Y*X
接近但不完全等于单位矩阵 eye(size(X))
。
Y*X
ans = 3×3
1.0000 0.0000 -0.0000
0 1.0000 -0.0000
0 -0.0000 1.0000
线性方程组求解
了解为何通过使用 inv(A)*b
求逆矩阵对线性方程组求解不如使用反斜杠运算符(即 x = A\b
)直接求解。
创建一个 500 阶的随机矩阵 A
,其条件数 cond(A)
为 1e10
,并且其范数 norm(A)
为 1
。精确解 x
是一个长度为 500 的随机向量,并且右侧为 b = A*x
。因此,线性方程组未正确设置条件但一致。
n = 500; Q = orth(randn(n,n)); d = logspace(0,-10,n); A = Q*diag(d)*Q'; x = randn(n,1); b = A*x;
通过反转系数矩阵 A
对线性方程组 A*x = b
求解。使用 tic
和 toc
获取时间信息。
tic y = inv(A)*b; t = toc
t = 0.3760
求计算的绝对误差和残差。
err_inv = norm(y-x)
err_inv = 3.8312e-06
res_inv = norm(A*y-b)
res_inv = 5.2645e-07
现在,使用反斜杠运算符 \
对同一个线性方程组求解。
tic z = A\b; t1 = toc
t1 = 0.3818
err_bs = norm(z-x)
err_bs = 2.6139e-06
res_bs = norm(A*z-b)
res_bs = 2.8735e-15
反斜杠计算方法速度更快,而且残差减少了几个数量级。err_inv
和 err_bs
均为 1e-6
的阶数这个事实直接反映了矩阵的条件数。
此示例的行为非常常见。使用 A\b
(而非 inv(A)*b
)的速度要快两至三倍,并且会基于计算机准确度生成残差(相对于数据量值而言)。
输入参数
详细信息
矩阵求逆
对于矩阵 X
,如果存在一个具有相同大小的矩阵 Y
以便 (其中 是 n
×n
单位矩阵),则该矩阵为可逆矩阵。矩阵 Y
称为 X
的逆矩阵。
没有逆矩阵的矩阵是奇异矩阵。对于方阵,仅当其行列式恰好为零时,它才是奇异矩阵。
提示
很少需要为某个矩阵构造显式逆矩阵。当解算线性方程组 Ax = b 时,往往会错误使用
inv
。对该方程求解的方法之一是使用x = inv(A)*b
。从执行时间和数值准确性方面而言,一种更好的方法是使用矩阵反斜杠运算符,即x = A\b
。这会使用高斯消去法求解,而不必显式构造逆矩阵。有关详细信息,请参阅mldivide
。
算法
inv
执行输入矩阵的 LU 分解(如果输入矩阵是 Hermitian 矩阵,则执行 LDL 分解)。然后它使用结果来形成线性方程组,其解为矩阵求逆 inv(X)
。对于稀疏输入,inv(X)
将创建稀疏单位矩阵并使用反斜杠,即 X\speye(size(X))
。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
奇异矩阵输入可能生成与 MATLAB® 结果不同的非有限值。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅Run MATLAB Functions in Thread-Based Environment。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
X
必须是非稀疏矩阵。如果
X
未正确缩放或接近奇异矩阵,MATLABinv
函数会显示警告。gpuArray
inv
不能检查此情况。请采取措施来避免这种情况。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出R2022a: 改进了对大型三角矩阵求逆时的性能
inv
函数对大型三角矩阵执行运算时的性能得到了改进。
例如,对一个 5000×5000 上三角矩阵求逆比上一版本快 3.7 倍。
function timingInv rng default A = randn(5e3); [~,R] = lu(A); tic Y = inv(R); toc end
大致的执行时间是:
R2021b:1.1 秒
R2022a:0.3 秒
代码是在运行 Windows® 10 的 Intel® Xeon® CPU W-2133 @ 3.60 GHz 测试系统上通过调用 timingInv
函数进行计时的。
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)