Matlab中inv函数的使用

目录

语法

说明

示例

逆矩阵

线性方程组求解


        inv功能作用是矩阵求逆

语法

Y = inv(X)

说明

Y = inv(X) 计算方阵 X 的逆矩阵。

  • X^(-1) 等效于 inv(X)。

  • x = A\b 的计算方式与 x = inv(A)*b 不同,建议用于求解线性方程组。

示例

逆矩阵

        计算一个 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.0212

        求计算的绝对误差和残差。

err_inv = norm(y-x)
err_inv = 5.1504e-06
res_inv = norm(A*y-b)
res_inv = 5.9510e-07

        现在,使用反斜杠运算符 \ 对同一个线性方程组求解。

tic
z = A\b;
t1 = toc
t1 = 0.0113
err_bs = norm(z-x)
err_bs = 4.0520e-06
res_bs = norm(A*z-b)
res_bs = 3.9167e-15

        反斜杠计算方法速度更快,而且残差减少了几个数量级。err_inv 和 err_bs 均为 1e-6 的阶数这个事实直接反映了矩阵的条件数。

        此示例的行为非常常见。使用 A\b(而非 inv(A)*b)的速度要快两至三倍,并且会基于计算机准确度生成残差(相对于数据量值而言)。

​        输入矩阵,指定为方阵。如果 X 未正确缩放或接近奇异矩阵,inv 计算的数值将不准确。使用 rcond 或 cond 检查矩阵的条件数。

        对于矩阵 X,如果存在一个具有相同大小的矩阵 Y 以便 XY=YX=In(其中 In 是 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))。

  • 9
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLABinv函数用于计算一个矩阵的逆矩阵。具体用法为inv(A),其A为输入矩阵。调用inv函数将返回输入矩阵A的逆矩阵。然而,需要注意的是,通常情况下不建议直接使用inv函数来解决线性方程组。根据引用和引用的解释,使用inv函数求解线性方程组可能会导致性能较差的结果。相比之下,更推荐使用反斜杠运算符(\)来求解线性方程组,即A\b。这种方法使用高斯消元法来求解方程组,而不需要显式构造逆矩阵。这不仅可以提高计算速度,还可以提高结果的数值准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlabinv函数代码-ECE_5470_Homework_3:ECE_5470_Homework_3](https://download.csdn.net/download/weixin_38645133/19012895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Matlabinv函数使用](https://blog.csdn.net/jk_101/article/details/111224146)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值