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

Sympy无法求解的微分方程及非齐次线性ODE问题咨询

Sympy求解常微分方程问题解决方案

问题1:不显含x的二阶ODE求解失败

给定方程:1 + y·y'' + (y')² = 0,直接调用dsolve无法得到解,这类不显含自变量x的二阶ODE,适合通过y'=p(将p视为y的函数)的变量替换法手动转化为一阶方程求解。

解决步骤与代码

import sympy as sp

x = sp.symbols('x')
y = sp.Function('y')(x)
p = sp.Function('p')(y)  # 令p = dy/dx,且p是y的函数

# 替换二阶导数:y'' = dp/dx = dp/dy · dy/dx = p·dp/dy
y_prime = p
y_double_prime = p * sp.diff(p, y)

# 代入原方程得到一阶ODE
diff_eqn = sp.Eq(1 + y * y_double_prime + y_prime**2, 0)
print("替换后的一阶方程:")
display(diff_eqn)

# 求解一阶方程
sol_p = sp.dsolve(diff_eqn, p)
print("\n一阶方程的解:")
display(sol_p)

# 回代p = dy/dx,求解原方程的通解
for sol in sol_p:
    print("\n原方程的通解:")
    ode = sp.Eq(sp.diff(y, x), sol.rhs)
    sol_y = sp.dsolve(ode, y)
    display(sol_y)

执行后会得到两个形式的通解,对应一阶方程解的两个分支。


问题2:非齐次线性方程指定hint报错

给定方程:f''(x) + 4f(x) = 8sin(2x),指定hint为nth_linear_euler_eq_nonhomogeneous_undetermined_coefficients时触发ValueError,原因是该hint仅适用于欧拉方程(形如xⁿy⁽ⁿ⁾ + a₁xⁿ⁻¹y⁽ⁿ⁻¹⁾ + ... + aₙy = f(x)的变系数方程),而当前方程是常系数线性非齐次方程,需使用对应类型的解法。

正确解法代码

方法1:不指定hint,让Sympy自动识别求解

from sympy import dsolve, Function, Derivative, sin
from sympy.abc import x

f = Function('f')
eq = Derivative(f(x), x, x) + 4*f(x) - 8*sin(2*x)
sol = dsolve(eq, f(x)).expand()
print("通解:")
display(sol)

方法2:指定正确的hint

from sympy import dsolve, Function, Derivative, sin
from sympy.abc import x

f = Function('f')
eq = Derivative(f(x), x, x) + 4*f(x) - 8*sin(2*x)
sol = dsolve(eq, f(x), hint='nth_linear_constant_coeff_nonhomogeneous').expand()
print("通解:")
display(sol)

两种方法都会得到正确的通解:f(x) = C₁cos(2x) + C₂sin(2x) - 2xcos(2x)。


内容的提问来源于stack exchange,提问作者Prateek Sonthalia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:59