- 主题:求大佬算一下,这个矩阵的逆矩阵,是多少?谢谢
mul=np.array([[ 2.79358336e-03, -4.33801272e-03, 1.49405606e-01, -1.49494674e-01],
[-4.33801272e-03, 6.73628032e-03, -2.32004399e-01, 2.32142708e-01],
[ 1.49405606e-01, -2.32004399e-01, 7.99047014e+00, -7.99523365e+00],
[-1.49494674e-01, 2.32142708e-01, -7.99523365e+00 , 8.00000000e+00]])
我算出来的逆矩阵是:
ni=[[1.15688790e+09 8.31687162e+08 6.45472327e+08 6.42572567e+08]
[8.31687176e+08 2.31447075e+09 1.72043424e+09 1.66778988e+09]
[6.45472390e+08 1.72043428e+09 5.47332438e+09 5.43220196e+09]
[6.42572630e+08 1.66778992e+09 5.43220196e+09 5.39257748e+09]]
然后,print(np.dot(mul,ni)) 结果是:
[[ 0.9793222 -0.3413915 -0.14888251 -0.32711732]
[ 0.0321095 1.53012961 0.23119211 0.5079639 ]
[ -1.10588455 -18.25820923 -6.96250153 -17.49479675]
[ 1.10654449 18.26909256 7.96724701 18.50522614]]
这个根本不是单位阵啊。怎么回事呢?
但是,我用print(np.dot(mul,np.linalg.inv(mul))),能得到单位阵:
[[ 1.00000000e+00 0.00000000e+00 0.00000000e+00 -1.19209290e-07]
[-2.98023224e-08 1.00000006e+00 -2.38418579e-07 0.00000000e+00]
[ 9.53674316e-07 -1.90734863e-06 1.00000000e+00 7.62939453e-06]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00]]
--
FROM 120.242.253.*
你这个矩阵不可求逆吧
det(x) 几乎等于 0 了
【 在 feng321 的大作中提到: 】
: mul=np.array([[ 2.79358336e-03, -4.33801272e-03, 1.49405606e-01, -1.49494674e-01],
: [-4.33801272e-03, 6.73628032e-03, -2.32004399e-01, 2.32142708e-01],
: [ 1.49405606e-01, -2.32004399e-01, 7.99047014e+00, -7.99523365e+00],
: ...................
--
FROM 117.152.203.*
谢谢,行列式确实是 9.606177199181016e-28,非常接近0. 但现在的问题是:在for循环中用 np.linalg.matrix_rank(mul),求出来的秩是3.而我把print 出来的mul,单独放到一个py文件中求秩,又是4.而且matlab可以求出来他的逆矩阵,matlab中计算逆矩阵和原矩阵的乘积,能得到单位阵。而python中计算 print(np.dot(mul,ni)),却得不到单位阵。
matlab中求秩,rank(A,tol) 中还可以设置tol
在numpy中求秩,有没有类似的tol设置?不然主程序中跑 的秩是3,而把数据copy出来再求秩,又是4.很不好理解啊
【 在 snoopyzhao 的大作中提到: 】
: 你这个矩阵不可求逆吧
: det(x) 几乎等于 0 了
:
--
FROM 120.242.253.*
【 在 feng321 的大作中提到: 】
: 标 题: Re: 求大佬算一下,这个矩阵的逆矩阵,是多少?谢谢
: 发信站: 水木社区 (Sun Apr 10 14:19:35 2022), 站内
:
: 谢谢,行列式确实是 9.606177199181016e-28,非常接近0. 但现在的问题是:在for循环中用 np.linalg.matrix_rank(mul),求出来的秩是3.而我把print 出来的mul,单独放到一个py文件中求秩,又是4.而且matlab可以求出来他的逆矩阵,matlab中计算逆矩阵和原矩阵的乘积,能得到单
: 位阵。而python中计算 print(np.dot(mul,ni)),却得不到单位阵。
: matlab中求秩,rank(A,tol) 中还可以设置tol
: 在numpy中求秩,有没有类似的tol设置?不然主程序中跑 的秩是3,而把数据copy出来再求秩,又是4.很不好理解啊
: 【 在 snoopyzhao 的大作中提到: 】
: : 你这个矩阵不可求逆吧
: : det(x) 几乎等于 0 了
: :
我没有你说的这两个软件
你的原始数据精度是什么样子的?你 print 出来的是一个单精度的矩阵,而内部存贮的可能是双精度,这种精度损失可能会影响到你的结果
因为 python 内部求秩不是满秩自然就没有逆矩阵了
--
FROM 117.152.203.*
length = np.linalg.matrix_rank(mul,tol=0.0000000000000001) ##求秩
谢谢大佬,我这样设置后,求得的秩是4.但是逆矩阵仍然报异常。
via1 = np.linalg.inv(mul) ##求逆
报: raise LinAlgError("Singular matrix")
numpy.linalg.LinAlgError: Singular matrix
【 在 snoopyzhao 的大作中提到: 】
:
: 我没有你说的这两个软件
: 你的原始数据精度是什么样子的?你 print 出来的是一个单精度的矩阵,而内部存贮的可能是双精度,这种精度损失可能会影响到你的结果
: ...................
--
FROM 120.242.253.*
【 在 feng321 的大作中提到: 】
: length = np.linalg.matrix_rank(mul,tol=0.0000000000000001) ##求秩
: 谢谢大佬,我这样设置后,求得的秩是4.但是逆矩阵仍然报异常。
: via1 = np.linalg.inv(mul) ##求逆
: ...................
你的矩阵的确是奇异矩阵啊,行列的相关系数是-1或+1……
--
FROM 117.152.203.*