如何使用 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]
>>>
首先对相对 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]
>>>