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

如何用Python求解一阶齐次微分方程x·∂y/∂x=y+2x³sin²(y/x)并解决sympy报错

一阶齐次微分方程求解方案

你遇到的报错是因为sympy默认遍历求解方法时,没有匹配到该一阶齐次方程的适配规则,最终走到lie群方法分支时无法求解,抛出异常。可通过以下两种方式解决:

方法1:指定dsolve的求解类型参数

直接在dsolve中传入hint参数声明这是一阶齐次方程,sympy会自动使用齐次方程的变量代换逻辑求解,修改后的代码如下:

from sympy import *

x = symbols('x')
y = symbols('y', cls=Function)

eq = Eq(Derivative(y(x),x), 2*x**2 * sin(y(x)/x)**2 + y(x)/x)
display(eq)

# 指定hint为一阶齐次方程求解规则
an_sol = dsolve(eq, y(x), hint='1st_homogeneous')
display(an_sol)

运行后可以得到解析解,隐式形式为:
-1/tan(y(x)/x) = x**2 + C1
也可以转换为显式形式:
y(x) = x * atan(1/(C1 - x**2))
其中C1为任意常数。

方法2:手动变量代换后求解

你也可以手动做齐次方程的标准代换 u = y(x)/x(即 y(x) = u(x)*x),代入原方程化简为可分离变量的微分方程后求解,代码如下:

from sympy import *

x = symbols('x')
u = symbols('u', cls=Function)

# 代换y = u*x,求导后代入原方程
y = u(x) * x
dy_dx = diff(y, x)
eq = Eq(x * dy_dx, y + 2*x**3 * sin(u(x))**2)
# 整理化简方程
simplified_eq = simplify(eq)
display(simplified_eq)

# 求解u的微分方程
u_sol = dsolve(simplified_eq, u(x))
display(u_sol)

# 代换回y得到最终解
y_sol = u_sol.subs(u(x), y(x)/x)
display(y_sol)

两种方法得到的解完全一致,你可以代入原方程验证等式成立。

内容的提问来源于stack exchange,提问作者Altynay Utebayeva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:54:04