1实验07微分方程模型(2学时)(第5章微分方程模型)1.(验证)传染病模型2(SI模型)p136~138传染病模型2(SI模型):0(1),(0)dikiiiidt其中,i(t)是第t天病人在总人数中所占的比例。k是每个病人每天有效接触的平均人数(日接触率)。i0是初始时刻(t=0)病人的比例。1.1画~diidt曲线图p136~138取k=0.1,画出idtdi~的曲线图,求i为何值时dtdi达到最大值,并在曲线图上标注。参考程序:%传染病模型2(SI模型)的di/dt~i曲线图%文件名:p137fig2.m%λ=0.1clear;clc;fplot('0.1*x*(1-x)',[01.100.03]);x=fminbnd('-0.1*x*(1-x)',0,1)y=0.1*x*(1-x)holdonplot([0,x],[y,y],':',[x,x],[0,y],':');text(0,y,'(di/dt)m','VerticalAlignment','bottom');text(x,-0.001,num2str(x),'HorizontalAlignment','center');title('SI模型的di/dt~i曲线');xlabel('i');ylabel('di/dt');holdoff;提示:fplot,fminbnd,plot,text,title,xlabel1)画曲线图用fplot函数,调用格式如下:fplot(fun,lims)fun必须为一个M文件的函数名或对变量x的可执行字符串。2若lims取[xminxmax],则x轴被限制在此区间上。若lims取[xminxmaxyminymax],则y轴也被限制。本题可用fplot('0.1*x*(1-x)',[01.100.03]);2)求最大值用求解边界约束条件下的非线性最小化函数fminbnd,调用格式如下:x=fminbnd('fun',x1,x2)fun必须为一个M文件的函数名或对变量x的可执行字符串。返回自变量x在区间x1xx2上函数取最小值时的x值。本题可用x=fminbnd('-0.1*x*(1-x)',0,1)y=0.1*x*(1-x)3)指示最大值坐标用线性绘图函数plot,调用格式如下:plot(x1,y1,'颜色线型数据点图标',x2,y2,'颜色线型数据点图标',…)本题可用holdon;%在上面的同一张图上画线(同坐标系)plot([0,x],[y,y],':',[x,x],[0,y],':');4)图形的标注使用文本标注函数text,调用格式如下:格式1text(x,y,文本标识内容,'HorizontalAlignment','字符串1')x,y给定标注文本在图中添加的位置。'HorizontalAlignment'为水平控制属性,控制文本标识起点位于点(x,y)同一水平线上。'字符串1'为水平控制属性值,取三个值之一:'left',点(x,y)位于文本标识的左边。'center',点(x,y)位于文本标识的中心点。'right',点(x,y)位于文本标识的右边。格式2text(x,y,文本标识内容,'VerticalAlignment','字符串2')x,y给定标注文本在图中添加的位置。'VerticalAlignment'为垂直控制属性,控制文本标识起点位于点(x,y)同一垂直线上。'字符串1'为垂直控制属性值,取四个值之一:'middle','top','cap','baseline','bottom'。(对应位置可在命令窗口应用确定)本题可用text(0,y,'(di/dt)m','VerticalAlignment','bottom');text(x,-0.001,num2str(x),'HorizontalAlignment','center');35)坐标轴标注调用函数xlabel,ylabel和title本题可用title('SI模型di/dt~i曲线');xlabel('i');ylabel('di/dt');★程序运行结果(比较[138]图2):(在图形窗口菜单选择Edit/CopyFigure,复制图形)00.20.40.60.8100.0050.010.0150.020.0250.03(di/dt)m0.5SI模型的di/dt~i曲线idi/dt1.2画i~t曲线图p136~138求出微分方程的解析解i(t),画出i~t曲线(i(0)=0.15,k=0.2,t=0~30)(见[138]图1比较)。参考程序:%5.1传染病模型——模型2%文件名:p136fig1.m%di/dt=ki(1-i),i(0)=i0clear;clc;x=dsolve('Dx=k*x*(1-x)','x(0)=x0')%求微分方程的解析解,为符号表达式x0=0.15;k=0.2;%xi对应i,xi0对应i0,k对应λtt=0:0.1:30;%时间单位为天fors=1:length(tt)%x的表达式中没有点运算,按标量运算取值xxt=tt(s);xx(s)=eval(x);%给出xi0=0.2,k=0.2,t,求符号表达式xi的对应值end%xx为复数表示plot(tt,xx);4axis([03101.1]);title('图1SI模型的i~t曲线');xlabel('t(天)');ylabel('i(病人所占比例)');提示:1)求解微分方程dsolve],见提示;2)画出i~t曲线(i(0)=0.15,λ=0.2,t=0~30)用for循环,函数length,eval,plot,axis,title,xlabel,ylabel。★程序运行结果(见[138]图1):命令窗口中的结果:图形窗口中的结果(比较[138]图1):05101520253000.20.40.60.81图1SI模型的i~t曲线t(天)i(病人所占比例)2.(编程)传染病模型3(SIS模型)已知传染病模型3(SIS模型):0)0()],11([iiiidtdi其中,i(t)是第t天病人在总人数中所占的比例。λ是每个病人每天有效接触的平均人数(日接触率)。i0是初始时刻(t=0)病人的比例。σ是整个传染期内每个病人有效接触的平均人数(接触数)。52.1画~diidt曲线图p138~139取λ=0.1,σ=1.5,画出如下所示的idtdi~曲线图。试编写一个m文件来实现。(在图形窗口菜单选择Edit/CopyFigure,复制图形)00.050.10.150.20.250.30.350.4-0.500.511.522.53x10-3SIS模型的di/dt~i曲线idi/dt(注:p139图3)提示:用fplot函数画出idtdi~的曲线图;在上图上用plot函数画一条过原点的水平线;用title,xlabel,ylabel标注。★★编写的M文件和运行结果(见[139]图3):%传染病模型3(SIS模型)的di/dt~i曲线图%文件名:p138fig3.m%λ=0.1,σ=1.5clear;clc;fplot('-0.1*x*(x-(1-1/1.5))',[00.4-0.00050.003]);holdon;plot([0,0.4],[0,0],':');title('SIS模型的di/dt~i曲线');6xlabel('i');ylabel('di/dt');00.050.10.150.20.250.30.350.4-0.500.511.522.53x10-3SIS模型的di/dt~i曲线idi/dt2.2画i~t曲线图p138~139要求:求出微分方程的解析解i(t)。取λ=0.2,σ=3,t=0~40,画出如下所示的图形。试编写一个m文件来实现。7051015202530354000.10.20.30.40.50.60.70.80.91t(天)i(病人所占比例)图1SI模型的i~t曲线(λ=0.2,σ=3)i(0)=0.21-1/σi(0)=0.9(注:p139图4)其中蓝色实线为i(0)=0.2时的i~t曲线(第1条);黑色虚点线为过点(0,1-1/σ)的水平线(第2条);红色虚线为i(0)=0.9时的i~t曲线(第3条)。提示图例标注可用legend('i(0)=0.2','1-1/¦σ','i(0)=0.9');★★编写的M文件和运行结果(比较[139]图4):解法一:程序:%传染病模型3(SIS模型)的i~t曲线图%文件名:p138fig4.mclear;clc;%λ=0.2,σ=3,i(0)=0.2,x代表ix=dsolve('Dx=-0.2*x*(x-(1-1/3))','x(0)=0.2')%求微分方程的解析解,为符号表达式tt=0:0.1:40;%时间单位为天fori=1:length(tt)t=tt(i);xx(i)=eval(x);endplot(tt,xx);8holdon;plot([0,41],[1-1/3,1-1/3],'-.k');%λ=0.2,σ=3,i(0)=0.9x=dsolve('Dx=-0.2*x*(x-(1-1/3))','x(0)=0.9')tt=0:0.1:40;%时间单位为天fori=1:length(tt)t=tt(i);xx(i)=eval(x);endplot(tt,xx,':r');legend('i(0)=0.2','1-1/σ','i(0)=0.9');axis([04001]);title('图1SI模型的i~t曲线(λ=0.2,σ=3)');xlabel('t(天)');ylabel('i(病人所占比例)');命令窗口的结果:图形窗口的结果:9051015202530354000.10.20.30.40.50.60.70.80.91t(天)i(病人所占比例)图1SI模型的i~t曲线(λ=0.2,σ=3)i(0)=0.21-1/σi(0)=0.9解法二:程序:%传染病模型3(SIS模型)的i~t曲线图%文件名:p138fig4.mclear;clc;%λ=0.2,σ=3,x代表ix=dsolve('Dx=-0.2*x*(x-(1-1/3))','x(0)=x0')%求微分方程的解析解,为符号表达式tt=0:0.1:40;%时间单位为天forx0=[0.2,0.9]%i(0)=0.2,0.9fort=ttxx(2-(x0==0.2),round(t/0.1)+1)=eval(x);endendplot(tt,xx(1,:),'-b',[0,41],[1-1/3,1-1/3],'-.k',tt,xx(2,:),':r');legend('i(0)=0.2','1-1/σ','i(0)=0.9');axis([04001]);title('图1SI模型的i~t曲线(λ=0.2,σ=3)');xlabel('t(天)');ylabel('i(病人所占比例)');命令窗口的结果:10图形窗口的结果:与解法一相同解法三:程序%传染病模型3(SIS模型)的i~t曲线图%文件名:p138fig4.mclear;clc;x=dsolve('Dx=-lam*x*(x-(1-1/si))','x(0)=x0')%求微分方程的解析解,为符号表达式tt=0:0.1:40;%时间单位为天lam=0.2;si=3;%λ=0.2,σ=3,x代表iforx0=[0.2,0.9]%i(0)=0.2,0.9fort=ttxx(2-(x0==0.2),round(t/0.1)+1)=eval(x);endendplot(tt,xx(1,:),'-b',[0,41],[1-1/3,1-1/3],'-.k',tt,xx(2,:),':r');legend('i(0)=0.2','1-1/σ','i(0)=0.9');axis([04001]);title('图1SI模型的i~t曲线(λ=0.2,σ=3)');xlabel('t(天)');ylabel('i(病人所占比例)');命令窗口的结果:图形