首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy不正确解矩阵方程

Numpy不正确解矩阵方程
EN

Stack Overflow用户
提问于 2021-02-20 01:23:26
回答 2查看 225关注 0票数 3

在下面的代码中,result不应该与eqtn_ans[1]相同,因为numpy在求解联立方程时没有问题吗?还是我遗漏了什么?

既然numpy能够得到eqtn_coeffs的逆,那么这个方程不是可以解的吗?

代码语言:javascript
复制
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.

结果:

代码语言:javascript
复制
0.625
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-20 01:33:15

很容易看出你为什么有问题。

代码语言:javascript
复制
np.linalg.det(eqtn_coeffs)

版画

代码语言:javascript
复制
3.3194268620340867e-17

如果矩阵的行列式为零,那么它所表示的线性方程组就没有解(准确地说,没有期望的唯一解)。换句话说,方程组至少包含两个不线性独立的方程。

票数 2
EN

Stack Overflow用户

发布于 2021-02-20 01:43:56

看起来你已经达到了IEEE-754双倍的量化极限。params出来了

代码语言:javascript
复制
[3.27075180e+15, 1.72019082e+15, 5.51642915e+14]

eqtn_coeffs的每个值都是~1,它们之间的差值大约为零。事实上,你可以看到一个数字,它是~ULP乘以1e-15。

eqtn_coeffs.dot(params)的其余部分显示相同的模式。请注意,近似正确的比例四舍五入到两个最接近的幂的极小倍数:

代码语言:javascript
复制
[0.125 0.75  1.25 ]

描述这一点的一个更简单的方法是说你的方程条件很差。它们在技术上不依赖于数学意义,但也可能与您的机器上可用的精度有关,因此参数大得令人不快。

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

https://stackoverflow.com/questions/66287050

复制
相关文章

相似问题

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