如何使用 Sympy 求解关于函数的(简单)方程

How to solve a (simple) equation with respect to a function using Sympy

首先对相对 simple/stupid 的问题感到抱歉,但我确实已经尝试了所有方法,但还没有找到解决方案。

我得到一个方程式,其中有符号 (r,theta,M,a),还有 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 就是上面的)

我试过:

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

还有很多没有结果

编辑:只是为了展示一个更简单但相同的逻辑示例,如果我可以解决关于 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 

这是一个与函数相关的'gotcha'。如果您希望能够随时为函数提供特定参数,则需要将名称定义为 Python 函数或 lambda 或 SymPy 函数(不是表达式)或 Lambda。

这会创建一些无法调用的东西;就像 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]

>>>