Sympy - не конвертира правилно `solve()`

Извинявам се, ако това вече е задавано.

Току-що научавам за 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*алфа] или нещо подобно. Предполагам, че SymPy по някаква причина преобразува числото 2,666 в низ с цели числа.

Как мога да поправя този проблем? Също така, има ли някакъв начин да получа дробната форма на решението?


person Clarinetist    schedule 08.07.2014    source източник


Отговори (2)


Вероятно използвате 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]
person DSM    schedule 08.07.2014

Можете също да използвате help(solve), за да прочетете документалния низ на решение, който казва как да използвате ключовата дума rational:

>>> solve(x-.3)
[0.300000000000000]
>>> solve(x-.3, rational=True)
[3/10]
person smichr    schedule 09.07.2014