我试图用numpy来解矩阵的逆,但无法使其工作。 Python代码如下:
import copy
import numpy as np
from numpy.linalg import *
K=[[0.13535533905932737, -0.03535533905932737, 0.0, 0.0, -0.1],
[-0.03535533905932737, 0.13535533905932737, 0.0, -0.1, 0.0],
[0.0, 0.0, 0.13535533905932737, 0.03535533905932737, -0.03535533905932737],
[0.0, -0.1, 0.03535533905932737, 0.13535533905932737, -0.03535533905932737],
[-0.1, 0.0, -0.03535533905932737, -0.03535533905932737, 0.13535533905932737]]
newK = np.array(K)
newK = inv(newK)
结果如下:
^{2}$我也试着用MATLAB来检查这个值,但结果是:
a =
0.1340 -0.0350 0 0 -0.1000
-0.0350 0.1350 0 -0.1000 0
0 0 0.1350 0.0350 -0.0350
0 -0.1000 0.0350 0.1350 -0.0350
-0.1000 0 -0.0350 -0.0350 0.1350
>> inv(a)
ans =
1.0e+03 *
-1.0000 -1.0000 0.0000 -1.0000 -1.0000
-1.0000 -0.9808 -0.0033 -0.9841 -0.9967
0.0000 -0.0033 0.0089 -0.0044 0.0011
-1.0000 -0.9841 -0.0044 -0.9785 -0.9956
-1.0000 -0.9967 0.0011 -0.9956 -0.9911
有人能帮我吗?在
首先,两个程序的两个矩阵不完全相同:
纽比:
matlab软件:
^{pr2}$在numpy中使用相同的矩阵:
反之亦然:
其次,numpy例子中的矩阵实际上是奇异的,它的行列式是
1e-21
。这意味着它的逆函数不存在,并且在结果中定义得非常糟糕(解释了震级1e16
的矩阵元素)。在注意,矩阵之间的差异不能用手来表示“两个矩阵在内部是相同的,只有matlab没有写那么多小数位数”,因为numpy
0.13535533905932737
的矩阵元素在matlab中打印为0.1340
,这显然是错误的,不管打印精度如何。在还要注意,matlab矩阵不是奇异的唯一原因是它的大多数元素是
0.135
,但它的第一个元素是0.134
。如果你让这个元素变得和其他元素相等(就像在numpy的例子中一样!),你得到给你。如果你的实际矩阵是numpy中的一个,那么解决方案很简单:不要反转它,因为它没有逆矩阵。在
为了说服您,请考虑一个随机矩阵,其元素模式与您的
newK
矩阵相同:然后你得到
这意味着任何具有这种结构的矩阵都是奇异的。在
使用sympy的最终证明:
那么符号行列式是
相关问题 更多 >
编程相关推荐