You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy中两种矩阵求逆方法结果不一致的问题排查

关于Sympy中数值矩阵求逆的异常问题

尝试在Sympy中对以下数值矩阵求逆:

In [56]: A_MATRIX_M
Out[56]: 
⎡0.174683794941032   0.174688696013867   0.174688696013957   0.174683794941032   0.174688696013867   0.174688696013957 ⎤
⎢                                                                                                                      ⎥
⎢0.152985639387222   0.153053070078189   0.153053070078123   0.152985677401143   0.153053070078189   0.153053070078123 ⎥
⎢                                                                                                                      ⎥
⎢0.122289719307085    0.12255894161074    0.12255894161075   0.122289780080333    0.12255894161074    0.12255894161075 ⎥
⎢                                                                                                                      ⎥
⎢0.0888623464387251  0.0894599879866164  0.0894599879864983  0.0888623905998649  0.0894599879866165  0.0894599879864984⎥
⎢                                                                                                                      ⎥
⎢0.0584375462953993  0.0593271595778474  0.0593271595779078  0.0584375753365935  0.0593271595778473  0.0593271595779078⎥
⎢                                                                                                                      ⎥
⎣0.034711924284652   0.0356325950288525  0.035632595028856   0.0347119415351321  0.0356325950288525  0.035632595028856 ⎦

两种求逆方法的结果差异

  1. 使用.inv()方法得到的结果:
In [59]: A_M_INV.inv()
Out[59]: 
⎡-4.20862006694537e-38  -3.64678015602041e-38  -4.89393679687261e-39  -5.26008046298975e-38  -1.29781892788192e-38  1.12107780599699e-37 ⎤
⎢                                                                                                                                        ⎥
⎢-1.19250990841802e-38  -1.17838767512258e-38  -5.49930182641769e-39  -1.79347381150519e-38  -3.76673961453884e-39  3.67594291864767e-38 ⎥
⎢                                                                                                                                        ⎥
⎢1.27521806859415e-38   1.38241733868129e-38   1.33016305680983e-39   1.89098712400354e-38   7.63333345652249e-39   -4.07574230117266e-38⎥
⎢                                                                                                                                        ⎥
⎢-3.71566091342595e-39  -3.69178932808298e-39  -1.37147644288023e-39  -4.68481431180264e-39  -3.97158856857654e-39  8.39451101073365e-39 ⎥
⎢                                                                                                                                        ⎥
⎢1.47794212524182e-38   1.21859956435038e-38   7.46216287435121e-40   2.08223967916098e-38   8.25097707225834e-39   -4.0465253879286e-38 ⎥
⎢                                                                                                                                        ⎥
⎣-2.5158985894826e-39   -3.62021834376681e-39  -3.99023376900161e-40   -5.881653010039e-39   -3.44892577031322e-39  6.50635833262352e-39 ⎦
  1. 使用伴随矩阵除以行列式(A_MATRIX_M.adjugate() / A_MATRIX_M.det())得到的结果:
In [57]: A_M_INV = A_MATRIX_M.adjugate() / A_MATRIX_M.det()

In [58]: A_M_INV
Out[58]: 
⎡-1.03014934740997e+38  9.76285991918083e+37   -2.61712726811554e+38  -2.91755290755826e+38  2.02091254231468e+37   8.60970411767247e+37 ⎤
⎢                                                                                                                                        ⎥
⎢-1.0350460657459e+38   1.09196345494244e+38   1.65391718422458e+38   -4.62921116834264e+37  -4.10946591995717e+38  -2.93534695043802e+38⎥
⎢                                                                                                                                        ⎥
⎢3.44664755653471e+37   -1.86912642859017e+38  -8.76351586189679e+37  -2.26077970623935e+38  -1.67328014514703e+37  1.00789976403353e+38 ⎥
⎢                                                                                                                                        ⎥
⎢1.82916593489888e+37   -8.10152924803704e+37  -1.33638262519626e+38  2.88888937621382e+38   1.19814518627368e+38   -3.22157029803083e+38⎥
⎢                                                                                                                                        ⎥
⎢6.14049097203001e+37   2.94210971355518e+37   5.88396356342516e+37   -2.59752889211905e+38   1.036688778158e+38    1.24211877586664e+38 ⎥
⎢                                                                                                                                        ⎥
⎣-4.62263666898771e+37  2.94055576923073e+37   -1.04165393746291e+38  -2.89791317977202e+37  -5.86035000752247e+37  -1.95539341633241e+38⎦

问题核心原因

两种方法得到的结果完全不同且均无效,本质原因是该矩阵为病态/近乎奇异矩阵:

  • 近乎奇异矩阵的行列式值极小,伴随矩阵除以行列式时,极小的除数会直接放大数值,导致结果出现1e+38量级的极大值;
  • .inv()方法返回的极小值矩阵是数值计算对奇异矩阵的近似处理,并非真正有效的逆矩阵;
  • 这类矩阵本身不存在有效的逆矩阵,任何求逆操作都会因数值不稳定产生无意义的结果。

内容的提问来源于stack exchange,提问作者Joseph Farah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:27:04