如何在SymPy中将常微分方程的解转换为Function对象?
将SymPy表达式转换为Function对象以简化积分操作
这是《提取齐次二阶线性常微分方程的两个函数解》的后续需求:我需要把已得到的两个解u₁(值为1/r,类型为sympy.core.power.Pow)和u₂(值为r,类型为sympy.core.symbol.Symbol)转换成SymPy的Function对象,这样就能在自定义函数的定积分/不定积分等通用表达式中直接调用,比如用于计算常微分方程的特解。
目前我只能用变量替换的临时方法(subs)来实现,但这种方式既繁琐又可能存在稳定性问题。
当前的实现代码如下:
import sympy as sym p = sym.Function('p', real=True) def a1_par(u1, p): # 标准形式中,g(r) = p'(r) R = sym.symbols('R', real=True, positive=True) g = sym.diff(p(R), R) # 直接用u1*g无效,因为u1是r的表达式而非Function对象 # a1 = sym.integrate(u1*g, (R, 0, r)).doit() # 无法正常工作 a1 = sym.integrate(u1.subs(r,R)*g, (R, 0, r)).doit() # 临时 workaround return a1
如果u1是Function对象,积分代码可以简化为:
a1 = sym.integrate(u1(R)*g, (R, 0, r)).doit()
此外,我还希望a1_par的返回值能直接作为Function对象的句柄,方便后续其他计算场景使用。
内容的提问来源于stack exchange,提问作者sancho.s ReinstateMonicaCellio
相关产品推荐
相关产品推荐

