【整理】MATLAB之常微分方程

来源:互联网 发布:网络视听年度人物 编辑:程序博客网 时间:2024/04/27 16:59

0.微分方程的概念(虽然大家都懂,但既然是整理,所以还是写写吧)

对于常微分方程的定义我就不多说了吧,简单说就是未知函数是一元函数。如果是多元,那就是偏微分方程了。

微分方程中出现的未知函数的导数的最高阶数称为微分方程的阶

若方程中未知函数及其各阶导数都是一次,则称为线性常微分方程


1.初等积分法

对于一阶常系数线性常微分方程 y' = ay + b (a~=0) 我们可以通过移项,化为 dy / ( ay + b ) = dt再两边积分可得通解y(t)

所以有些常微分方程可用一些技巧(如变量分离法、积分因子法、常数变易法、降阶法等)化为可积分的方程而求得显式解。


2.常系数线性微分方程

对于它的求解可归结为:求一个特解和相应齐次微分方程的解

一阶变系数线性常微分方程可用这一思路求得显式解;

高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变易法求特解。

举个栗子:

求x'' + 0.2x' +3.92x = 0的通解

解: 特征方程为:v^2 + 0.2v + 3.92 = 0

>> roots( [ 1 0.2 3.92 ] )
求得共轭复根   -0.1000 ± 1.9774i

那么通解就很容易求了,这里就不解下去了。(打字太烦啦。。再见


一、初值问题求解(好吧,看到这里,下面开始正式进入用MATLAB指令解常微分方程,别打我。。。

我们最常用的是指令是 ode45

常用格式 [ t , y ] = ode45( odefun , tspan , y0 )

参数说明

odefun用以表示f(t,y)的函数句柄或inline函数i,t是标量,y是标量或向量tspan若是二维向量[t0,tf],表示自变量初值t0和终值tf;若是高维向量[t0,t1,...,tn],则表示输出结点列向量y0初值向量y0t表示结点列向量(t0,t1,...,tn)^Ty数值解矩阵,每一列对应y的一个分量
ode是最常用的求解微分方程的指令,它采用变步长四、五阶Runge-Kutta-Felhberg法适合高精度问题,ode23与ode45类似,只是精度低一些。


说了那么多,上栗题!


解:

先写M函数fun.m

function f = fun( t , x )f( 1 ) = -x( 1 ) ^ 3 - x( 2 );f( 2 ) = -x( 2 ) ^ 3 + x( 1 );f = f( : );   %保证f为列向量end
之后码

clear;[ t , x ] = ode45( @fun , [ 0 30 ] , [ 1 ; 0.5 ] );subplot( 1 , 2 , 1 );plot( t , x( : , 1 ) , t , x( : , 2 ) , ' : ' );subplot( 1 , 2 , 2 );plot( x( : , 1 ) , x( : , 2 ) )
运行后,作出了函数图和相平面图





0 0
原创粉丝点击