Sympy求解f''(x)=exp(f(x))报NotImplementedError如何解决?
SymPy求解二阶常微分方程报错问题解答
报错原因
你遇到的NotImplementedError确实是SymPy当前版本的功能限制:当前dsolve内置的求解器还未适配这类不含显式自变量、仅由未知函数及其二阶导数构成的自治二阶常微分方程的直接求解逻辑,因此会抛出未实现错误。
求解方案
这类方程可以通过自治二阶方程的通用降阶方法处理后求解,具体实现逻辑和代码如下:
自治二阶方程可以通过代换 u = Φ'(z) 实现降阶,根据链式法则二阶导数可改写为 Φ''(z) = u * du/dΦ,代入原方程后得到可分离变量的一阶方程 u * du = exp(Φ) dΦ,积分后再求解一阶方程即可得到解析解。
import sympy as sym # 定义符号与函数 z = sym.symbols('z', real=True) C1, C2 = sym.symbols('C1 C2', real=True) # 积分常数 Phi = sym.Function('Phi')(z) # 降阶代换 u = sym.Function('u')(Phi) d2Phi_dz2 = u * sym.diff(u, Phi) # 求解降阶后的一阶方程 eqn_reduced = sym.Eq(d2Phi_dz2, sym.exp(Phi)) sol_u = sym.dsolve(eqn_reduced) # 回代求解原方程 eqn_first_order = sym.Eq(sym.diff(Phi, z), sol_u.rhs.subs('C1', C1)) sol_phi = sym.dsolve(eqn_first_order) print(sol_phi)
如果仅需要数值解,也可以直接使用Scipy的odeint接口进行求解。
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

