我已经尝试过这个问题,并在我最近的Anaconda iPython' sympy版本0.7.4.1'结果相同:
m1,m2,r, F, G = symbols("m_1 m_2 r F_g G")
G = Float("6.67e-8")
rhs = (G * m1 * m2/r**2)
eq = Eq(F, rhs)
print eq
s=solve(eq, m1)
print s
给出了结果:
F_g == 6.67e-8*m_1*m_2/r**2
[14992503.7481259*F_g*r**2/m_2]
我通过一次更改重新编写程序 - 将e-8更改为e-9
G = Float("6.67e-9")
给出了结果
F_g == 6.67e-9*m_1*m_2/r**2
[]
这种情况在具有小蟒蛇浮子或同情浮子的方程式中始终如一。
我在版本0.72中注意到another report基本代数错误,但看到人们将它用于微积分。我做了一些非常愚蠢的事情,或者这是一个在症状解决方案中的错误。如果它是一个错误,我该如何解决它?
答案 0 :(得分:1)
这看起来像个错误。 我没有仔细阅读他们的源代码,以便肯定地说,但我会继续报告,然后立即使用解决方法。
有一些方法可以解决这个问题。
首先,您可以了解SymPy的安装方式。
我使用SymPy的开发版本并安装了gmpy作为所有任意精度算术的后端。
在我的系统上,此问题显示在6.67E-32
和6.67E-33
之间,而不是6.67E-8
和6.67E-9
。
获取开发版本并切换后端可能帮助。
另一方面,这只是对您的系统以及SymPy配置方式的猜测。
我完全错了。
仅部分更改设置可避免错误。 以下是代码的修改版本,完全避免了这个问题:
import sympy as sy
m1, m2, r, F, G = sy.symbols("m_1, m_2, r, F_g, G")
rhs = (G * m1 * m2/r**2)
eq = sy.Eq(F, rhs)
print eq
s=sy.solve(eq, m1)
print s[0].subs(G, sy.Float("6.67E-10000000000000000000", 1000))
唯一的区别是这段代码让SymPy使用符号完成所有工作,然后在最后替换浮点数。
尽管有令人发指的指数,这仍然会在我的机器上返回正确的答案。
用于实例化Float
对象的第二个参数是精度。
这显示了1000位精度的答案(尽管这种方法也适用于默认精度)。
答案 1 :(得分:1)
尝试使用SymPy 0.7.5。该版本已修复此错误。
答案 2 :(得分:1)
尝试将标记rational=False
传递给solve
。