Как решить (простое) уравнение относительно функции, используя Sympy - PullRequest
0 голосов
/ 24 февраля 2020

Прежде всего, извините за относительно простой / глупый вопрос, но я действительно все перепробовал и не нашел решения.

Я получаю уравнение, где символы (r, theta, M, а) есть, но также есть функция r: u_f (r).

uf =sp.Function('u_φ')(r)

Если я заменю все символы числовыми значениями, я получу выражение с u_f (r_0), например так:

MomentumR.subs({theta:sp.pi/2,M:1,a:0.9,r:2})

−0.0115244788566508*uφ^2(2)−0.175486420846152*uφ(2)+0.914728043583324

Хотя это простое уравнение, как я могу решить это относительно uφ (2) ( Вышеупомянутое выражение равно нулю в Солвере, поэтому переменная MomentumR ie точно такая же)

Я пробовал:

FF = `MomentumR.subs({theta:sp.pi/2,M:1,a:0.9,r:2})`
sp.solve(FF,uf)
sp.solve(FF,uf(2))
sp.solve(FF,uf(r))

и многие другие без результатов

РЕДАКТИРОВАТЬ: Просто чтобы представить более простой, но тот же пример Logi c, Если бы я мог решить в отношении G (2), или Если бы я мог добавить символ к вызову функции G (2), я бы по существу решите и первую проблему. Вот простой код для этого:

import sympy as sp
p = sp.Symbol('p')
M = sp.Symbol('M')
G = sp.Function('G')(p)

Eq = M*3*G**2+M**2*p*G+p
EqS = Eq.subs({M:1,p:2})
EqS 

1 Ответ

4 голосов
/ 24 февраля 2020

Это «ошибка», связанная с функциями. Если вы хотите иметь возможность указывать для функции заданный аргумент c в любое время, вам нужно определить имя как Python функцию или лямбду или как функцию SymPy (не выражение) или лямбду.

Это создает нечто, что не может быть вызвано; это похоже на f(r), и вы не можете сделать f(r)(r), потому что f(r) является выражением, и вы не можете вызвать выражение:

>>> uf =sp.Function('u_φ')(r)

Проще всего просто отключить (r) в этот случай. Тогда

>>> uf =sp.Function('u_φ')
>>> solve(uf(1) - 2)
[{u_φ(1): 2}]
>>> solve(uf(x)-2, uf(x))
[2]

>>> 
...