我有以下表达式:
p/l
我从矩阵中提取。我稍后使用以下代码
定义p和lfrom sympy.abc import c,G,M,J,l,u,v,w
us = (2*G*M/c**2)
a = (J/(M*c))
p = (u**2 + a**2*cos(v))
l = (u**2 - us*u + a**2)
我想替换表达式p/l
并用上面的所有表达式来描述它。我尝试过以下操作。如果g是sympy.Matrix对象,并且第一个元素定义为p/l
,那么
g[0,0].subs([(p,u**2 + a**2*cos(v)),(l,u**2 - us*u + a**2)])
应该做的伎俩,但我仍然得到p/l
,表达式保持不变。如果我只是在ipython会话中键入p/l
,我会得到输出
(J**2*cos(v)/(M**2*c**2) + u**2)/(-2*G*M*u/c**2 + J**2/(M**2*c**2) + u**2)
这是我想要的。 (差不多,我宁愿首先对它进行简化:(J**2*cos(v) + M**2*c**2*u**2)/(-2*G*M**3*u + J**2 + M**2*c**2*u**2)
)。
答案 0 :(得分:2)
您使用相同的表达式替换表达式,因此替换的结果与原始表达式相同。
确保不要混淆SymPy符号和Python变量:
# Python variable: `p` stores an addition object:
p = (u**2 + a**2*cos(v))
# SymPy symbol, it's just a symbol, no expressions:
p = Symbol('p')
# express symbol-expression relation in some way, like:
{p: (u**2 + a**2*cos(v))}