微分方程问题的解法.ppt
《微分方程问题的解法.ppt》由会员分享,可在线阅读,更多相关《微分方程问题的解法.ppt(86页珍藏版)》请在三一办公上搜索。
1、第六章 微分方程问题的解法,微分方程的解析解方法常微分方程问题的数值解法微分方程问题算法概述四阶定步长 Runge-Kutta算法及 MATLAB 实现一阶微分方程组的数值解微分方程转换特殊微分方程的数值解边值问题的计算机求解偏微分方程的解,6.1 微分方程的解析解方法,格式:y=dsolve(f1,f2,fm)格式:指明自变量 y=dsolve(f1,f2,fm,x)fi即可以描述微分方程,又可描述初始条件或边界条件。如:描述微分方程时 描述条件时,例:syms t;u=exp(-5*t)*cos(2*t+1)+5;uu=5*diff(u,t,2)+4*diff(u,t)+2*uuu=87*
2、exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1)+10 syms t y;y=dsolve(D4y+10*D3y+35*D2y+50*Dy+24*y=,.87*exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1)+10),y=dsolve(D4y+10*D3y+35*D2y+50*Dy+24*y=,.87*exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1).+10,y(0)=3,Dy(0)=2,D2y(0)=0,D3y(0)=0),分别处理系数,如:n,d=rat(double(v
3、pa(-445/26*cos(1)-51/13*sin(1)-69/2)ans=-8704 185%rat()最接近有理数的分数判断误差:vpa(-445/26*cos(sym(1)-51/13*sin(1)-69/2+8704/185)ans=,y=dsolve(D4y+10*D3y+35*D2y+50*Dy+24*y=,.87*exp(-5*t)*cos(2*t+1)+92*exp(-5*t)*sin(2*t+1)+.10,y(0)=1/2,Dy(pi)=1,D2y(2*pi)=0,Dy(2*pi)=1/5);如果用推导的方法求Ci的值,每个系数的解析解至少要写出10数行,故可采用有理式近
4、似 的方式表示.vpa(y,10)%有理近似值ans=1.196361839*exp(-5.*t)+.4166666667-.4785447354*sin(t)*cos(t)*exp(-5.*t)-.4519262218e-1*cos(2.*t)*exp(-5.*t)-2.392723677*cos(t)2*exp(-5.*t)+.2259631109*sin(2.*t)*exp(-5.*t)-473690.0893*exp(-3.*t)+31319.63786*exp(-2.*t)-219.1293619*exp(-1.*t)+442590.9059*exp(-4.*t),例:求解 x,y=
5、dsolve(D2x+2*Dx=x+2*y-exp(-t),Dy=4*x+3*y+4*exp(-t),例:syms t x x=dsolve(Dx=x*(1-x2)x=1/(1+exp(-2*t)*C1)(1/2)-1/(1+exp(-2*t)*C1)(1/2)syms t x;x=dsolve(Dx=x*(1-x2)+1)Warning:Explicit solution could not be found;implicit solution returned.In D:MATLAB6p5toolboxsymbolicdsolve.m at line 292x=t-Int(1/(a-a3+
6、1),a=.x)+C1=0故只有部分非线性微分方程有解析解。,6.2 微分方程问题的数值解法6.2.1 微分方程问题算法概述,微分方程求解的误差与步长问题:,6.2.2 四阶定步长Runge-Kutta算法 及 MATLAB 实现,function tout,yout=rk_4(odefile,tspan,y0)y0初值列向量 t0=tspan(1);th=tspan(2);if length(tspan)=3,h=tspan(3);%tspan=t0,th,h else,h=tspan(2)-tspan(1);th=tspan(end);end 等间距数组 tout=t0:h:th;yout
7、=;for t=tout k1=h*eval(odefile(t,y0);%odefile是一个字符串变量,为表示微分方程f()的文件名。k2=h*eval(odefile(t+h/2,y0+0.5*k1);k3=h*eval(odefile(t+h/2,y0+0.5*k2);k4=h*eval(odefile(t+h,y0+k3);y0=y0+(k1+2*k2+2*k3+k4)/6;yout=yout;y0;end 由效果看,该算法不是一个较好的方法。,6.2.3 一阶微分方程组的数值解6.2.3.1 四阶五级Runge-Kutta-Felhberg算法,通过误差向量调节步长,此为自动变步长
8、方法。四阶五级RKF算法有参量系数表。,6.2.3.2 基于 MATLAB 的微分方程,求解函数格式1:直接求解 t,x=ode45(Fun,t0,tf,x0)格式2:带有控制参数 t,x=ode45(Fun,t0,tf,x0,options)格式3:带有附加参数t,x=ode45(Fun,t0,tf,x0,options,p1,p2,)t0,tf求解区间,x0初值问题的初始状态变量。,描述需要求解的微分方程组:不需附加变量的格式 function xd=funname(t,x)可以使用附加变量 function xd=funname(t,x,flag,p1,p2,)t是时间变量或自变量(必须
9、给),x为状态向量,xd为返回状态向量的导数。flag用来控制求解过程,指定初值,即使初值不用指定,也必须有该变量占位。修改变量:options唯一结构体变量,用odeset()修改。options=odeset(RelTol,1e-7);options=odeset;options.RelTol=1e-7;,例:自变函数 function xdot=lorenzeq(t,x)xdot=-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);-x(1)*x(2)+28*x(2)-x(3);,t_final=100;x0=0;0;1e-10;%t_final为设定的仿真终止时间
10、 t,x=ode45(lorenzeq,0,t_final,x0);plot(t,x),figure;%打开新图形窗口 plot3(x(:,1),x(:,2),x(:,3);axis(10 42-20 20-20 25);%根据实际数值手动设置坐标系,可采用comet3()函数绘制动画式的轨迹。comet3(x(:,1),x(:,2),x(:,3),描述微分方程是常微分方程初值问题数值求解的关键。f1=inline(-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);,.-x(1)*x(2)+28*x(2)-x(3),t,x);t_final=100;x0=0;0;1e-
11、10;t,x=ode45(f1,0,t_final,x0);plot(t,x),figure;plot3(x(:,1),x(:,2),x(:,3);axis(10 42-20 20-20 25);得出完全一致的结果。,6.2.3.3 MATLAB 下带有附加参数的微分方程求解,例:,编写函数function xdot=lorenz1(t,x,flag,beta,rho,sigma)flag变量是不能省略的 xdot=-beta*x(1)+x(2)*x(3);-rho*x(2)+rho*x(3);-x(1)*x(2)+sigma*x(2)-x(3);求微分方程:t_final=100;x0=0;
12、0;1e-10;b2=2;r2=5;s2=20;t2,x2=ode45(lorenz1,0,t_final,x0,b2,r2,s2);plot(t2,x2),options位置为,表示不需修改控制选项 figure;plot3(x2(:,1),x2(:,2),x2(:,3);axis(0 72-20 22-35 40);,f2=inline(-beta*x(1)+x(2)*x(3);-rho*x(2)+rho*x(3);,.-x(1)*x(2)+sigma*x(2)-x(3),t,x,flag,beta,rho,sigma);flag变量是不能省略的,6.2.4 微分方程转换6.2.4.1 单
13、个高阶常微分方程处理方法,例:函数描述为:function y=vdp_eq(t,x,flag,mu)y=x(2);-mu*(x(1)2-1)*x(2)-x(1);x0=-0.2;-0.7;t_final=20;mu=1;t1,y1=ode45(vdp_eq,0,t_final,x0,mu);mu=2;t2,y2=ode45(vdp_eq,0,t_final,x0,mu);plot(t1,y1,t2,y2,:)figure;plot(y1(:,1),y1(:,2),y2(:,1),y2(:,2),:),x0=2;0;t_final=3000;mu=1000;t,y=ode45(vdp_eq,0
14、,t_final,x0,mu);由于变步长所采用的步长过小,所需时间较长,导致输出的y矩阵过大,超出计算机存储空间容量。所以不适合采用ode45()来求解,可用刚性方程求解算法ode15s()。,6.2.4.2 高阶常微分方程组的变换方法,例:,描述函数:function dx=apolloeq(t,x)mu=1/82.45;mu1=1-mu;r1=sqrt(x(1)+mu)2+x(3)2);r2=sqrt(x(1)-mu1)2+x(3)2);dx=x(2);2*x(4)+x(1)-mu1*(x(1)+mu)/r13-mu*(x(1)-mu1)/r23;x(4);-2*x(2)+x(3)-mu
15、1*x(3)/r13-mu*x(3)/r23;,求解:x0=1.2;0;0;-1.04935751;tic,t,y=ode45(apolloeq,0,20,x0);tocelapsed_time=0.8310 length(t),plot(y(:,1),y(:,3)ans=689得出的轨道不正确,默认精度RelTol设置得太大,从而导致的误差传递,可减小该值。,改变精度:options=odeset;options.RelTol=1e-6;tic,t1,y1=ode45(apolloeq,0,20,x0,options);tocelapsed_time=0.8110 length(t1),pl
16、ot(y1(:,1),y1(:,3),ans=1873,min(diff(t1)ans=1.8927e-004 plot(t1(1:end-1),diff(t1),例:,x0=1.2;0;0;-1.04935751;tic,t1,y1=rk_4(apolloeq,0,20,0.01,x0);tocelapsed_time=4.2570 plot(y1(:,1),y1(:,3)%绘制出轨迹曲线显而易见,这样求解是错误的,应该采用更小的步长。,tic,t2,y2=rk_4(apolloeq,0,20,0.001,x0);tocelapsed_time=124.4990 计算时间过长 plot(y2
17、(:,1),y2(:,3)%绘制出轨迹曲线严格说来某些点仍不满足106的误差限,所以求解常微分方程组时建议采用变步长算法,而不是定步长算法。,例:,用MATLAB符号工具箱求解,令 syms x1 x2 x3 x4 dx,dy=solve(dx+2*x4*x1=2*dy,dx*x4+3*x2*dy+x1*x4-x3=5,dx,dy)%dx,dy为指定变量dx=-2*(3*x4*x1*x2+x4*x1-x3-5)/(2*x4+3*x2)dy=(2*x42*x1-x4*x1+x3+5)/(2*x4+3*x2)对于更复杂的问题来说,手工变换的难度将很大,所以如有可能,可采用计算机去求解有关方程,获得
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微分方程 问题 解法
链接地址:https://www.31ppt.com/p-6161577.html