第五章 常微分方程数值解 5.3 常微分方程组 和边值问题的数值解法 § 5.3 常微分方程组和高阶 微分方程的数值解法简介 § 一 、 常微分方程组的数值解法 ? ? ? ??? ? ==′ ==′ ==′ 0021 20022122 10012111 )(),,,,( )(),,,,( )(),,,,( nnnnn n n yxyyyyxfy yxyyyyxfy yxyyyyxfy L LLL L L 下列包含多个一阶常微分方程的初值问题 ----------(1) 称为常微分方程组的初值问题 (1)式具有 n个未知函数 做如下假设 ?? ? ? ? ? ? ?? ? ? ? ? ? = ny y y Y M2 1 ?? ? ? ? ? ? ?? ? ? ? ? ? = ),( ),( ),( ),( 2 1 Yxf Yxf Yxf YxF n M ?? ? ? ? ? ? ?? ? ? ? ? ? = ?? ? ? ? ? ? ?? ? ? ? ? ? == 0 02 01 0 02 01 00 )( )( )( )( nn y y y xy xy xy xYY MM 则 (1)式化为矩阵形式 ?? ? = =′ 00 )( ),( YxY YxFY ----------(2) 只要将以前所介绍的各种求解方法中的函数转化为 函数向量 ,即可得到相应的常微分方程组的数值解法 这里只介绍求解微分方程组的计算机实现 [x,Y] = ODE45('F',xspan,Y0) 首先编制微分方程组的函数文件 : function z=F(x,Y) z=F(x,Y); 然后使用求解命令 ode45 F为微分方程组的文件名 xspan为需求值的节点向量 Y0为函数向量的初值 x为自变量 , Y为函数值矩阵 例 1. 求解微分方程组 5.1)0(532 0)0(2 2212 1211 =??=′ =+?=′ yyyxy yyyxy 解 : 首先编制微分方程组的 m文件 function z=fun(x,y) z(1)=x-y(1)+2*y(2); z(2)=2*x-3*y(1)-5*y(2); z=z'; 再编写求解程序 )20( ≤≤ x xspan=0:0.1:2; y0=[0,1.5]'; [x,y]=ode45('fun',xspan,y0) plot(x,y) 0 0.5 1 1.5 2 -0.5 0 0.5 1 1.5 x Y Y1 Y2运行 后得 二 、 高阶常微分方程的数值解法简介 例 2. 求下列高阶微分方程的数值解 03 =′?′′?′′′ yyyy 1)0(,1)0(,0)0( ?=′′=′= yyy )20( ≤≤ x 解 : 显然 yyyy ′+′′=′′′ 3 假设 yy =1 yy ′=2 yy ′′=3 则 21 yy =′ 32 yy =′ 1233 3 yyyy +=′ 1)0(,1)0(,0)0( 321 ?=′′== yyy 即二阶问题化为微分方程组的初值问题 21 yy =′ 32 yy =′ 1233 3 yyyy +=′ 1)0(,1)0(,0)0( 321 ?=′′== yyy? ? ? ??? ? Gaojiefangcheng.m gaojie.m function z=gaojie(x,y) z=[y(2);y(3);y(1)*y(2)+3*y(3)]; x y 0 0 0.1000 0.0945 0.2000 0.1754 0.3000 0.2381 0.4000 0.2765 0.5000 0.2822 0.6000 0.2436 0.7000 0.1451 0.8000 -0.0342 0.9000 -0.3230 1.0000 -0.7586 function gaojiefangcheng() xspan=0:0.1:1; y0=[0,1,-1]'; [x,y]=ode45('gaojie',xspan,y0); [x,y(:,1)] plot(x,y(:,1)) xlabel('x') ylabel('y') 0 0.2 0.4 0.6 0.8 1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 x y