在下面的代码中,result不应该与eqtn_ans[1]相同,因为numpy在求解联立方程时没有问题吗?还是我遗漏了什么?
既然numpy能够得到eqtn_coeffs的逆,那么这个方程不是可以解的吗?
import numpy as np
def solve_simultaneous_equation(eq_coef, ans):
A = np.array(eq_coef)
B = np.array(ans)
E = np.linalg.solve(A,B)
return E
eqtn_coeffs = [[0.13230431079864502, -0.4504314661026001, 0.6201357841491699],
[-0.04826474189758301, -0.4006437063217163, 1.5354962348937988],
[-0.22883379459381104, -0.3508559465408325, 2.4508566856384277]]
eqtn_ans = [0.0, 0.7853981852531433, 1.3258177042007446]
params = solve_simultaneous_equation(eqtn_coeffs, eqtn_ans)
result = np.dot(eqtn_coeffs[1],params)
print(result) # The result of this should be the same as eqtn_ans[1]
# but its not even though numpy was able to solve the equation.结果:
0.625发布于 2021-02-20 01:33:15
很容易看出你为什么有问题。
np.linalg.det(eqtn_coeffs)版画
3.3194268620340867e-17如果矩阵的行列式为零,那么它所表示的线性方程组就没有解(准确地说,没有期望的唯一解)。换句话说,方程组至少包含两个不线性独立的方程。
发布于 2021-02-20 01:43:56
看起来你已经达到了IEEE-754双倍的量化极限。params出来了
[3.27075180e+15, 1.72019082e+15, 5.51642915e+14]eqtn_coeffs的每个值都是~1,它们之间的差值大约为零。事实上,你可以看到一个数字,它是~ULP乘以1e-15。
eqtn_coeffs.dot(params)的其余部分显示相同的模式。请注意,近似正确的比例四舍五入到两个最接近的幂的极小倍数:
[0.125 0.75 1.25 ]描述这一点的一个更简单的方法是说你的方程条件很差。它们在技术上不依赖于数学意义,但也可能与您的机器上可用的精度有关,因此参数大得令人不快。
https://stackoverflow.com/questions/66287050
复制相似问题