You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:00:08