如果已经有人问了,我很抱歉。
我只是在学习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转换为整数字符串。
我怎样才能解决这个问题?还有,我能得到解的分数形式吗?
发布于 2014-07-08 21:04:47
您可能正在使用Python2.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]发布于 2014-07-09 13:14:34
您还可以使用help(solve)来读取用于说明如何使用rational关键字的解决方案的docstring:
>>> solve(x-.3)
[0.300000000000000]
>>> solve(x-.3, rational=True)
[3/10]https://stackoverflow.com/questions/24641520
复制相似问题