- 主题:求大佬算一下,这个矩阵的逆矩阵,是多少?谢谢
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]]
--
修改:feng321 FROM 120.242.253.*
FROM 120.242.253.*
有大佬愿意试一下吗?
--
FROM 120.242.253.*
import numpy as np
np.set_printoptions(precision=10)
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]])
length = np.linalg.matrix_rank(mul) ##求秩
print(length)
#print(np.linalg.inv(mul))
ceshi = np.round(np.linalg.inv(mul),decimals=9)
print(ceshi)
ni = np.array([[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(mul*ni)
# print(ni*mul)
a=np.array([[1,2],
[2,3]])
b=np.array([[3,6],
[4,1]])
print(a*b)
# print(np.dot(a,b))
print(np.dot(mul,ni))
# print(np.dot(mul,np.linalg.inv(mul)))
# #print(np.dot(a,np.linalg.inv(a)))
# print(np.dot(mul,np.linalg.inv(mul)))
--
FROM 120.242.253.*
round带来的误差吧
import numpy as np
np.set_printoptions(precision=10)
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]])
ceshi = np.linalg.inv(mul)
print(ceshi)
print(np.dot(mul,ceshi))
结果很好。
[[ 9.9999999972e-01 2.2738627202e-09 1.3793326802e-07 3.0552397130e-08]
[-1.9312036348e-08 1.0000000003e+00 -3.5390205509e-08 7.9395173337e-08]
[ 7.9788092474e-07 5.8153643304e-07 1.0000081132e+00 -2.5645946665e-06]
[ 0.0000000000e+00 0.0000000000e+00 0.0000000000e+00 1.0000000000e+00]]
--
修改:control FROM 123.112.65.*
FROM 123.112.65.*
矩阵的秩是0,矩阵奇异,见下面的代码:
import numpy as np
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]])
print(np.linalg.det(mul)) #矩阵的秩是9.606177199181016e-28,矩阵奇异
invert = np.linalg.pinv(mul)
res = mul @ invert
print(res)
print(np.allclose(res ,np.identity(4),atol=1e-5))
"""
运行结果如下:
9.606177199181016e-28
[[ 9.99999067e-01 -2.57493788e-06 -8.34044913e-06 -8.27511874e-06]
[-2.70488427e-08 9.99999971e-01 -1.43064478e-07 4.40046838e-08]
[ 1.02612640e-06 2.64162443e-06 9.99999986e-01 3.03112968e-06]
[-9.53674316e-07 -1.90734863e-06 0.00000000e+00 1.00000000e+00]]
True
"""
【 在 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 120.245.130.*
--
FROM 120.245.130.*
谢谢
【 在 bluegangster 的大作中提到: 】
: [upload=1][/upload]
--
FROM 120.242.253.*
不能用det判断哦,得用cond
m = np.random.randn(500, 4); m = m.T @ m * 1e-12; print(f'det = {np.linalg.det(m)}'); print('-' * 32); print(np.linalg.inv(m) @ m); print('-' * 32); print(m @ np.linalg.inv(m)); print('-' * 32); print(f'cond = {np.linalg.cond(m)}')
det = 5.6088940463798e-38
--------------------------------
[[ 1.000 -0.000 0.000 -0.000]
[ 0.000 1.000 -0.000 -0.000]
[ 0.000 0.000 1.000 -0.000]
[ 0.000 -0.000 0.000 1.000]]
--------------------------------
[[ 1.000 -0.000 0.000 0.000]
[ 0.000 1.000 0.000 -0.000]
[ 0.000 -0.000 1.000 0.000]
[-0.000 -0.000 -0.000 1.000]]
--------------------------------
cond = 1.203413506219224
【 在 bluegangster 的大作中提到: 】
: 矩阵的秩是0,矩阵奇异,见下面的代码:
: import numpy as np
: mul=np.array([[ 2.79358336e-03, -4.33801272e-03, 1.49405606e-01, -1.49494674e-01],
: ...................
--
FROM 148.75.74.*