2015-10-13 3 views
1

У меня есть следующее выражение:Подставляя выражение с SymPy

p/l 

, которые я извлечь из матрицы. Позже я определить р и л с следующим кодом

from 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 и описать его, а не со всеми из перечисленных выше выражений. Я попытался сделать следующее. Если г является объектом sympy.Matrix и первый элемент определяется как p/l, то

g[0,0].subs([(p,u**2 + a**2*cos(v)),(l,u**2 - us*u + a**2)]) 

должен сделать трюк, но вместо этого я все еще получаю p/l, выражение остается неизменной. Если я просто введите p/l в IPython сессии я получить выход

(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)).

ответ

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))} 
+0

Благодарности. Я просто хотел прокомментировать, что, поскольку выражения, перечисленные выше, являются взаимозависимыми, я должен был убедиться, что я заменил в правильном порядке: 'us, p, a, l = symbols ('us, p, a, l'); g = g.subs ({p: u ** 2 + a ** 2 * cos (v)}); g = g.subs ({l: u ** 2 - us * u + a ** 2}); g = g.subs ({us: 2 * G * M/c ** 2}); g = g.subs ({a: J/(M * c)}); g = упростить (g) ' – imranal

Смежные вопросы