利用Methematica推导一阶线性微分方程

M

ethematica是一款符号运算的利器,可以完成各种复杂的符号运算。在这里我们尝试利用这一软件进行一阶微分方程的推导。首先回顾一下一阶微分方程的解法。

形如:$$\frac{\mathrm{d} y}{\mathrm{d} x} + P\left ( x \right )y =Q\left ( x \right )·····\left ( 1 \right )$$即为一阶线性微分方程。
如果\(Q\left ( x \right )\equiv 0\),那么该方程是齐次的;
如果\(Q\left ( x \right )\)不为0,那么该方程是非齐次的。

一、齐次方程

首先讨论如下齐次方程的通解:$$\frac{\mathrm{d} y}{\mathrm{d} x} + P\left ( x \right )y =0·····\left ( 2 \right )$$
分离变量:$$\frac{\mathrm{d} y}{\mathrm{d} y} = -P\left ( x \right ){\mathrm{d} x}·····\left ( 3 \right ) $$
两边积分得:$$lny=-\int P\left ( x \right ){\mathrm{d} x} + lnc·····\left ( 4 \right ) $$
整理即可得通解:$$y=c\cdot e^{-\int P\left ( x \right ){\mathrm{d} x}}·····\left ( 5 \right ) $$

二、非齐次方程

接下来使用常数变易法求非齐次线性方程(1)的通解。
将齐次方程通解中的常数c换成\(u\left ( x \right )\equiv 0\):$$y=u\cdot e^{-\int P\left ( x \right ){\mathrm{d} x}}·····\left ( 6 \right ) $$
两边求导得:$$\frac{\mathrm{d} y}{\mathrm{d} x}={u}’e^{-\int P\left ( x \right ){\mathrm{d} x}}-uP\left ( x \right )e^{-\int P\left ( x \right ){\mathrm{d} x}}·····\left ( 6 \right ) $$
与式(1)对比可得:$${u}’e^{-\int P\left ( x \right ){\mathrm{d} x}}=Q\left ( x \right )·····\left ( 7 \right ) $$
$$u=c+\int Q\left ( x \right )e^{\int P\left ( x \right ){\mathrm{d} x}}{\mathrm{d} x}·····\left ( 8 \right ) $$
将式(8)代到式(5):$$y=e^{-\int P\left ( x \right ){\mathrm{d} x}}\cdot\left [ c+\int Q\left ( x \right )e^{\int P\left ( x \right ){\mathrm{d} x}}{\mathrm{d} x} \right ] ·····\left ( 9 \right ) $$
化简得:$$y=c \cdot e^{-\int P\left ( x \right ){\mathrm{d} x}}+e^{-\int P\left ( x \right ){\mathrm{d} x}} \cdot \int Q\left ( x \right )e^{\int P\left ( x \right ){\mathrm{d} x}}{\mathrm{d} x} ·····\left ( 10 \right ) $$
可以看出,第一项是齐次方程的通解,第二项是非齐次方程的一个特解。

接下来,在Mathematica中进行相关求解。

一、直接求解

直接在软件输入界面输入如下公式:

DSolve[D[y[x], x] + p[x] y[x] == q[x], y[x], x]

即可获得非齐次方程的通解如下图:

二、分步推导

首先将非齐次方程存储到一个名为“非齐次方程”的符号中:

非齐次方程 = HoldForm[D[y[x], x] + p[x] y[x] == q[x]]

然后求解相应齐次方程的通解并存储在“齐次方程通解”中:

齐次方程通解 = DSolve[D[y[x], x] + u[x] y[x] == 0, y[x], x]

接下来,将通解中的常数项c1替换为C[x]并存储在“常数变易方程”中:

常数变易方程 = 齐次方程通解 /. C[1] -> C[1][x]

将变易后的方程代到非齐次方程中,可以得到含有常数函数的方程:

常数方程 = ReleaseHold[非齐次方程 /. 常数变易方程]

将上图中的方程求解:

常数解 = DSolve[常数方程, C[1], x]

使用常数函数替换齐次方程通解中的常数,可得特解:

特解 = 齐次方程通解 /. C[1] -> C[1][x] /. 常数解

那么非齐次方程的通解为特解+齐次通解:

非齐次通解 = y[x] -> Simplify[((y[x] /. 特解) + (y[x] /. 齐次方程通解))]

验证一下,将非齐次通解带入原来的非齐次方程检验是否正确:

ReleaseHold[非齐次方程 /. 非齐次通解]

等号左右相同,说明计算出来的非齐次通解正确。

本文链接:https://cuitn.com/?p=734