研究了使用matlab如何解微分方程。
考虑如下微分方程。
{ x ˙ = − b y y ˙ = − a x , { x ( 0 ) = x 0 y ( 0 ) = y 0 \left\{\begin{matrix} \dot x = -by \\ \dot y = -ax \end{matrix}\right. ,\quad \left\{\begin{matrix} x(0) = x_0 \\ y(0) = y_0 \end{matrix}\right. {x˙=−byy˙=−ax,{x(0)=x0y(0)=y0
其解为
{ x = ( a x 0 + b y 0 ) e − a b t + ( a x 0 − b y 0 ) e a b t 2 a y = ( a x 0 + b y 0 ) e − a b t − ( a x 0 − b y 0 ) e a b t 2 b \left\{\begin{matrix} x = \frac{(\sqrt a x_0 + \sqrt b y_0)e^{-\sqrt{ab}t}+(\sqrt ax_0-\sqrt by_0)e^{\sqrt{ab}t}}{2\sqrt a} \\ y = \frac{(\sqrt a x_0 + \sqrt b y_0)e^{-\sqrt{ab}t}-(\sqrt ax_0-\sqrt by_0)e^{\sqrt{ab}t}}{2\sqrt b} \end{matrix}\right. ⎩⎨⎧x=2a(ax0+by0)e−abt+(ax0−by0)eabty=2b(ax0+by0)e−abt−(ax0−by0)eabt
用MATLAB代码来解这个微分方程,代码为
S1 = dsolve('Dx = -b*y', 'Dy = -a*x', 'y(0) = y0', 'x(0) = x0');
y = S1.y
x = S1.x
结果为
y =
(exp(-t*(a*b)^(1/2))*(a*x0 + y0*(a*b)^(1/2)))/(2*(a*b)^(1/2)) - (exp(t*(a*b)^(1/2))*(a*x0 - y0*(a*b)^(1/2)))/(2*(a*b)^(1/2))
x =
(exp(t*(a*b)^(1/2))*(a*x0 - y0*(a*b)^(1/2)))/(2*a) + (exp(-t*(a*b)^(1/2))*(a*x0 + y0*(a*b)^(1/2)))/(2*a)
把结果写成代数形式,为
{ x = e a b t ( a x 0 − a b y 0 ) + e − a b t ( a x 0 + a b y 0 ) 2 a y = e − a b t ( a x 0 + a b y 0 ) − e a b t ( a x 0 − a b y 0 ) 2 a b \left\{\begin{matrix} x = \frac{e^{\sqrt {ab}t}(ax_0 - \sqrt{ab}y_0) + e^{-\sqrt {ab}t }(ax_0 + \sqrt{ab} y_0) }{2a} \\ y = \frac{e^{- \sqrt {ab}t}(ax_0+ \sqrt{ab}y_0) - e^{\sqrt {ab}t }(ax_0- \sqrt{ab} y_0) }{2\sqrt{ab}} \\ \end{matrix}\right. ⎩⎨⎧x=2aeabt(ax0−aby0)+e−abt(ax0+aby0)y=2abe−abt(ax0+aby0)−eabt(ax0−aby0)
和用手算的结果一样,也就是说用MATLAB可以解代数微分方程。