Sympy - 没有正确地转换`solve()`

时间:2014-07-08 21:00:08

标签: python sympy

如果已经提出这个问题,我道歉。

我只是在学习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转换为整数字符串。

如何解决此问题?另外,有什么方法可以得到解决方案的分数形式吗?

2 个答案:

答案 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]