如何在MATLAB中求解含dx和dy的微分方程?求解遇阻求助
解决MATLAB求解微分方程$(3xy²)dx + (2x²y)dy = 0$的问题
问题根源
你的代码错误在于将dy、dx定义为独立符号变量,并用diff(y)、diff(x)赋值——当x、y是独立符号变量时,diff(y)、diff(x)会被MATLAB解析为1,代入后方程变成代数方程而非微分方程,导致dsolve报错。
正确实现方案
方法1:转为$\frac{dy}{dx}$标准形式求解
原方程可整理为一阶微分方程的标准形式:
$$\frac{dy}{dx} = -\frac{3y}{2x}$$
对应MATLAB代码:
syms y(x) dy = diff(y, x); eqn = dy == -3*y/(2*x); sol = dsolve(eqn)
运行后得到通解:
$$y(x) = C_1 x^{-3/2}$$
将其整理为你给出的形式:两边平方得$y^2 = C_2 x{-3}$,即$x3 y^2 = C$,进一步开5次方后就是$C = (x^3 y2){1/5}$(常数形式可灵活转换,本质一致)。
方法2:保留全微分形式求解
如果想贴合原方程的写法,可将dy替换为diff(y,x)*dx,再两边除以dx($dx≠0$),代码如下:
syms y(x) eqn = 3*x*y(x)^2 + 2*x^2*y(x)*diff(y,x) == 0; sol = dsolve(eqn)
得到的通解与方法1一致,若需整理为隐式形式,可执行:
syms C implicit_eqn = x^3 * y(x)^2 == C;
核心注意事项
- 必须将
y定义为x的函数y(x),让MATLAB识别这是微分方程而非代数方程。 - 原方程中的
dy、dx是微分关系,并非独立符号变量,对应MATLAB中的diff(y,x)(即$\frac{dy}{dx}$)和1($\frac{dx}{dx}$)。
内容的提问来源于stack exchange,提问作者Karen Chen
相关产品推荐
相关产品推荐

