1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2.5,微分方程,2.5.1,常微分方程的符号解,Maltlab,提供了求解线性常微分方程函数,r=dsolve(eq1,eq2,.,cond1,cond2,.,v),,可以有以下几种调用格式:,1,),r=,dsolve(eqn,v),:输入利用符号方程表示的微分方程,eqn,,,v,为自变量,系统缺省的自变量为,t,,返回方程通解;,2,),r=dsolve(eq1,eq2,.,v),:输入量,eq1,eq2,.,为利用符号方程表示的常微分方程组,其它同,1,);,3,),r=dsolve(eq1,co
2、nd1,cond2,.,v),:输入利用符号方程表示的微分方程,eqn,,而,cond1,cond2,.,表示初始条件;,4,),r=dsolve(eq1,eq2,.,cond1,cond2,.,v),:输入量,eq1,eq2,.,为利用符号方程表示的常微分方程组,而,cond1,cond2,.,表示初始条件,.,注意:,在调用此函数之前,必须首先将给定的常微分方程或方程组中的一阶导数用,D,表示,,如 写成,D,y,,写成,D,ny,.,解:,1,),Y,Z=dsolve(Dy=3*y-2*z,Dz=2*y-z,x),2,)本题是同济大学数学教研室编写的,高等数学,中的例题,,书中没有给出明
3、确的通解表达式,,X,Y=dsolve(D2y+Dy-x=exp(t),D2y+Dx+y=0),2.5.2,常微分方程的数值解,1,、在求常微分方程数值解方面,,MATLAB,具有丰富的函数,我们将其统称为,solver,,其一般格式为:,T,Y=solver(odefun,tspan,y0),该函数表示在区间,tspan,=,t,0,t f,上,用初始条件,y0,求解显式常微分方程 ,其中,odefun,为显式常微分方程 中的;,tspan,为求解区间,要获得问题在其他指定点 上的解,则令,(,要求,ti,单调)、,y0,初始条件,.,Solver,可取命令,ode45,,,ode23,,,
4、ode113,,,ode15s,,,ode23s,,,ode23t,,,ode23tb,等,.,1,),T,Y=ode45(odefun,tspan,y0),:大部分场合的首选算法,一步算法,,4,5,阶,Runge-Kutta,方法累积截断误差;,2,),T,Y=ode23(odefun,tspan,y0),:适用于精度较低的情形,一步算法,,2,3,阶,Runge-Kutta,方法累积截断误差;,3,),T,Y=ode113(odefun,tspan,y0),:计算速度较快,多步算法,,Adams,算法,高低精度均可达到;,4,),T,Y=ode23t(odefun,tspan,y0),:
5、采用梯形算法,适度刚性方程情形;,5,),T,Y=ode15s(odefun,tspan,y0),:若,ode45,失效时,可尝试使用其解决问题,,Gears,反向数值积分,精度中等;,6,),T,Y=ode23s(odefun,tspan,y0),:一步法,,2,阶,Rosebrock,算法,低精度,.,2,、在求解过程中有时需要对求解算法和控制条件进行进一步设置,这是可以通过求解过程中的,options,变量进行修改,初始,options,变量可以通过,odeset,(),获取,该函数为创建或改写,ODE,选项构架参数值,.,1,),options=odeset(name1,value1,
6、name2,value2,.),创建,ODE,选项构架参数值,控制参数,name1,name2,.,的属性值通过,value1,value2,.,来设定,.,常用控制参数主要有:,RelTol,:为相对容许上限,默认,0.001,;,AbsTol,:为一个向量,其分量表示每个状态变量允许的绝对误差,其默认值为,10-6,;,MaxStep,:为求解方程最大允许的步长;,Mass,:微分代数方程中的质量矩阵,可用于描述微分代数方程;,2,),options=odeset(oldopts,name1,value1,.),改写现有,oldopts,的,options,结构体;,3,),options
7、odeset(oldopts,newopts,),通过与新,newopts,的,options,结构体合并,改写现有,oldopts,的,options,结构体,.,fun=inline(-2*y+2*x*x+2*x);,x,y=ode23(fun,0,0.5,1),解:首先建立名为,rigid.M,的函数,function dy=rigid(t,y),dy=zeros(3,1);%a column vector,dy(1)=y(2)*y(3);,dy(2)=-y(1)*y(3);,dy(3)=-0.51*y(1)*y(2);,由已知得初始条件向量,0 1 1,,设置允许误差分别为,10,
8、4,10,-5,10,-6,,相对容许上限,10,-4,,然后在窗口中输入:,options=odeset(RelTol,1e-4,AbsTol,1e-4 1e-4 1e-5);,T,Y=ode45(rigid,0 12,0 1 1,options),plot(T,Y(:,1),-,T,Y(:,2),-.,T,Y(:,3),.);,首先建立,vdp1.M,文件:,function dydt=vdp1(t,y),dydt=y(2);(1-y(1)2)*y(2)-y(1);,然后建立,M,文件,并运行:,t,y=ode45(vdp1,0 20,2;0);plot(t,y(:,1),-,t,y(:
9、2),-),title(Solution of van der Pol Equation,mu=1);,xlabel(time t);,ylabel(solution y);,legend(y_1,y_2),2.5.3,偏微分方程的解法及应用,使用,GUI,求解偏微分方程的一般步骤是:,1,、区域设置,2,、设置边界条件,3,、设置方程类型,4,、网格剖分,5,、初值和误差的设置,6,、数值解的输出,7,、解的图形,使用程序常用命令有:,1,、,g=,circleg,%,调用几何体函数,circleg.m,2,、,b=circleb1%,调用边界条件函数,circleb.m,3,、,u=as
10、sempde(b,p,e,t,c,a,f)%,解偏微分方程,4,、,p e t=initmesh(h)%,对几何区域进行初始网格剖分,5,、,pdemesh(p,e,t,u)%,绘制,PDE,的三角形网格图,6,、,pdesurf(p,t,u)%,绘制,PDE,的表面图,解决这个问题可以通过使用图形用户界面(,Graphical User Interface,,简记为,GUI,),则可通过在命令窗口键入,pdetool,,回车后出现,PDEToolbox,窗口,.,然后通过一系列按钮你输入命令的方式完成,这里只给出,Matlab,程序求解,PDE,问题的方法,.,输入命令为:,g=circle
11、g;h=hmax;%,调用已有函数,p,e,t=initmesh(g,h,1);,%,对几何区域进行初始网格,err=1;,while err0.001,p,e,t=refinemesh(g,p,e,t);%,加密网格,b=circleb1;%,调用已有函数,u=assempde(b,p,e,t,1,0,1);%,解偏微分方程,exact=(1-p(1,:).2-p(2,:).2)/4;%,给出精确解,err=norm(u-exact,inf);,end,pdemesh(p,e,t)%,绘制,网格图,figure,pdesurf(p,t,u)%,新开窗口,绘制,方程解的曲面图,figure,p
12、desurf(p,t,u-exact)%,新开窗口,绘制,误差图,2.5.4,传染病传播问题,1,、求导函数,diff,;,2,、绘图函数,plot,;,3,、微分方程求解函数,dsolve,、,ode45,等,.,2.5.5,人口增长的预测,1,、拟合函数,polyfit,polyfit,(,x,y,n,):,x,y,为要拟合的数据,,n,为希望最佳拟合数据的多项式的次数,.,如果我们选择,n=1,,得到最简单的线性近似,通常称为线性回归,.,如果我们选择,n=2,作为阶次,得到一个,2,阶多项式,.,返回值为多项式的系数,高次在前,低次在后,.,2,、多项式函数的预测值,polyval,Y
13、polyval,(p,,,x),:求,polyfit,所得的多项式在,x,处的预测值,Y.p,是,polyfit,函数的返回值,,x,和,polyfit,函数的,x,值相同,.,3,、函数插值,interp1,、,interp2,、,interp3,1,)一维插值:,interp1(x,y,cx,method),此函数对于数据分析和曲线拟合都是很重要的,.,它应用多项式技术用多项式函数拟合提供的已知数据,通过已知的点求出一个适当的函数,并提供理想的插值点,.,其中,y,为包含函,数值的矢量,,x,是与,y,长度相同的矢量,包含与,y,相对应的取值,.,矢量,cx,包含用于插值的点,.,第四
14、个参数,method,用于指定插值方法,主要包括:邻近插值(,nearest,)、线性插值(,linear,)、样条插值(,spline,)、立方插值(,cubic,),.,2,)二维插值,interp2(X,Y,Z,X1,Y1,method),Z,为包含二维函数值的数组;数组,X,与,Y,具有相同的大小,为对应于,Z,的取值的自变量组成的数组;,X1,与,Y1,为用于插值的数组;参数,method,用于指定插值方法,主要包括:邻近插值(,nearest,)、双线性插值,(linear),、二重三次方插值,(cubic).,3,)三维插值,interp3(X,Y,Z,V,X1,Y1,Z1,method),实现三维数据插值,,X1,、,Y1,与,Z1,为用于确定插值点函数值的三个自变量的值的组成的数组;对于有三个自变量的函数,v=,f(x,y,z),任意一点,x,y,z,存在与之对应的值,v,,在插值时必须指定,X,、,Y,、,Z,的三个数组及其与之对应的函数值组,V,;,method,用于指定插值方法,主要包括:邻近插值(,nearest,)、三次线性插值,(linear),、三次立方插值,(cubic).,






