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
。这可能吗?
答案 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]])