如果已经提出这个问题,我道歉。
我只是在学习SymPy,我想知道为什么它不会为似乎是一个简单的等式吐出正确的答案。
from sympy.solvers import solve
from sympy import Symbol, simplify
from sympy.abc import x, alpha, sigma
alpha = Symbol('alpha')
x = Symbol('x')
sigma = Symbol('sigma')
solve((alpha - 0.5*(sigma**2))*((alpha + 0.5*(sigma**2)))**(-1)+ (1/7),sigma**2, simplify = True)
它吐出[2.0 * alpha],我知道这是不正确的。事实上,答案应该是[2.6666 * alpha]或类似的东西。我假设SymPy出于某种原因将数字2.666转换为整数字符串。
如何解决此问题?另外,有什么方法可以得到解决方案的分数形式吗?
答案 0 :(得分:3)
您可能正在使用Python 2.7,因此1/7
正在为您提供整数除法:
>>> 1/7
0
>>> 1./7
0.14285714285714285
>>> solve((alpha - 0.5*(sigma**2))*((alpha + 0.5*(sigma**2)))**(-1)+ (1/7),sigma**2, simplify = True)
[2.0*alpha]
>>> solve((alpha - 0.5*(sigma**2))*((alpha + 0.5*(sigma**2)))**(-1)+ (1./7),sigma**2, simplify = True)
[2.66666666666667*alpha]
如果你想得到分数答案,可能就像
>>> from sympy import Rational
>>> solve((alpha - (sigma**2)/2)*((alpha + (sigma**2)/2))**(-1)+ Rational(1,7),sigma**2, simplify = True)
[8*alpha/3]
答案 1 :(得分:0)
您还可以使用help(solve)
阅读解决的文档字符串,了解如何使用rational
关键字:
>>> solve(x-.3)
[0.300000000000000]
>>> solve(x-.3, rational=True)
[3/10]