如何避免分数的评估?

时间:2018-01-10 09:08:55

标签: python sympy

This question很好地解释了如何使用sympy来计算雅可比。

我的问题是,是否有办法避免评估可能导致“丑陋”的分数。数字。例如,

from sympy import exp, Matrix, symbols

x0, x1, mu, E, T = symbols('x0 x1 mu, E, T')

X = Matrix([exp(x0 / 8.314 / T), -x1 + mu*x0*(1 - x1**2)])
Y = Matrix([x0, x1])
print(X.jacobian(Y))

这会产生

Matrix([
[0.120279047389945*exp(0.120279047389945*x0/T)/T,               0],
[                                mu*(-x1**2 + 1), -2*mu*x0*x1 - 1]])

我希望将0.120279047389945保留为1 / 8.314。这可能吗?

1 个答案:

答案 0 :(得分:3)

8.314是一个浮点数,所以它是近似值。 Sympy认为将1/8.314更改为0.12027没有任何害处。

您可以使用符号替换8.314

>>> from sympy import Symbol
>>> magic_factor = Symbol('8.314', positive=True, real=True)
>>> X = Matrix([exp(x0 / magic_factor / T), -x1 + mu*x0*(1 - x1**2)])
>>> print(X.jacobian(Y))
Matrix([[exp(x0/(8.314*T))/(8.314*T), 0], [mu*(-x1**2 + 1), -2*mu*x0*x1 - 1]])