首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >伪逆不能产生正确的输出

伪逆不能产生正确的输出
EN

Stack Overflow用户
提问于 2021-11-24 10:57:43
回答 1查看 179关注 0票数 0

我有一些2x2矩阵,我想反演。当使用pinv (要么是numpy pinv,scipy pinv,又或者scipy pinv2)时,对于其中的一些元素,我得到了一个排序-30的元素的答案,这比它们应该的要小得多。矩阵有一个很大的行列式(如此非零),所以它是可逆的。如果我使用scipy.linalg.inv,它可以正常工作。这些矩阵都是相当相似的,它们中的大多数都能很好地处理pinv。

有人知道这里会发生什么吗?

编辑:对不起,忘了包括一个例子。如果我

代码语言:javascript
运行
复制
A = [[1e2, -1.6e9], [-1.6e9, 3e16]]

然后使用np.linalg.inv给出[6.81e-2, 3.63e-9; 3.63e-9, 2.27e-16],而np.linalg.pinv给出[9.48e-32, -1.77e-24; -1.77e-24, 3.33e-17]

代码语言:javascript
运行
复制
import numpy as np
A = np.matrix([[1e2, -1.6e9], [-1.6e9, 3e16]])
print(np.linalg.pinv(A))
print(np.linalg.inv(A))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 11:24:24

问题是矩阵有非常不同的奇异值。

代码语言:javascript
运行
复制
np.linalg.svd(A)[1]
代码语言:javascript
运行
复制
[3.00000000e+16, 1.46666666e+01]

在默认情况下,皮涅夫有一个rcond=1e-15,这决定了是否必须包含一个单数值。您可以简单地增加rcond

代码语言:javascript
运行
复制
np.linalg.pinv(A, rcond=1e-20) @ A
代码语言:javascript
运行
复制
matrix([[ 9.99999996e-01,  2.06089933e-01],
        [-1.93556853e-16,  1.00000001e+00]])

这解决了你眼前的问题,但你可能需要检查这些病态矩阵对最终结果的影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70094858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档