本题可用
x=fminbnd('-0.1*x*(1-x)',0,1)
y=0.1*x*(1-x)
4)指示最大值坐标
用线性绘图函数plot,调用格式如下:
plot(x1,y1,’颜色线型数据点图标’,x2,y2,’颜色线型数据点图标’,…)
说明参见《数学实验》p225
本题可用
holdon;%在上面的同一张图上画线(同坐标系)
plot([0,x],[y,y],':
',[x,x],[0,y],':
');
3)图形的标注
使用文本标注函数text,调用格式如下:
格式1
text(x,y,文本标识内容,’HorizontalAlignment’,’字符串1’)
x,y给定标注文本在图中添加的位置。
’HorizontalAlignment’为水平控制属性,控制文本标识起点位于点(x,y)同一水平线
上。
’字符串1’为水平控制属性值,取三个值之一:
‘left’,点(x,y)位于文本标识的左边。
‘center’,点(x,y)位于文本标识的中心点。
‘right’,点(x,y)位于文本标识的右边。
格式2
text(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');
4)坐标轴标注
调用函数xlabel,ylabel和title
本题可用
title('SI模型di/dt~i曲线');
xlabel('i');
ylabel('di/dt');
2.实验7-2传染病模型2(SI模型)——画i~t曲线图
(参考教材p137-138)
传染病模型2(SI模型):
di/dt=ki(1-i),i(0)=i0;
其中,
i(t)是第t天病人在总人数中所占的比例。
k是每个病人每天有效接触的平均人数(日接触率)。
i0是初始时刻(t=0)病人的比例
求出微分方程的解析解i(t),画出如下所示的i~t曲线(i(0)=0.15,k=0.2,
t=0~30)。
试编写一个m文件来实现。
(在图形窗口菜单选择Edit/CopyFigure,复制
图形)
[提示]
1)求解微分方程
常微分方程符号解用函数dsolve,调用格式如下:
dsolve(‘equ1’,’equ2’,…,’变量名’)
以代表微分方程及初始条件的符号方程为输入参数,多个方程或初始条件可在一个输入
变量内联立输入,且以逗号分隔。
默认的独立变量为t,也可把t变为其他的符号变量。
字符D代表对独立变量的微分,通常指d/dt。
本题可用
x=dsolve(‘Dx=k*x*(1-x)’,’x(0)=x0’)
2)画出i~t曲线(i(0)=0.15,λ=0.2,t=0~30)
用for循环,函数length,eval,plot,axis,title,xlabel,ylabel
3.实验7-3传染病模型3(SIS模型)——画di/dt~i曲线图
(参考教材p138-139)
已知传染病模型3(SIS模型):
di/dt=-λi[i-(1-1/σ)],i(0)=i0
其中,
i(t)是第t天病人在总人数中所占的比例。
λ是每个病人每天有效接触的平均人数(日接触率)。
i0是初始时刻(t=0)病人的比例。
σ是整个传染期内每个病人有效接触的平均人数(接触数)。
取λ=0.1,σ=1.5,画出如下所示的di/dt~i曲线图。
试编写一个m文件来实现。
(在图
形窗口菜单选择Edit/CopyFigure,复制图形)
[提示]
用fplot函数画出di/dt~i曲线图;
在上图上用plot函数画一条过原点的水平
用title,xlabel,ylabel标注。
4.实验7-4传染病模型3(SIS模型)——画i~t曲线图
(参考教材p138-139)
已知传染病模型3(SIS模型):
di/dt=-λi[i-(1-1/σ)],i(0)=i0
其中,
i(t)是第t天病人在总人数中所占的比例。
λ是每个病人每天有效接触的平均人数(日接触率)。
i0是初始时刻(t=0)病人的比例。
σ是整个传染期内每个病人有效接触的平均人数(接触数)。
实验要求:
求出微分方程的解析解i(t)。
取λ=0.2,σ=3,t=0~40,画出如下所示的图形。
试编写
一个m文件来实现。
其中
蓝色实线为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');
5.实验7-5传染病模型4(SIR模型)
(参考教材p140-141)
SIR模型的方程:
di/dt=λsi-μii(0)=i0
ds/dt=-λsis(0)=s0
实验要求:
1.设λ=1,μ=0.3,i(0)=0.02,s(0)=0.98。
输入p139的程序,并修改程序中
的[t,x],使得输出的数据格式如下(提示:
取4位小数,使用四舍五入取整函数round,
矩阵剪裁和拼接):
ans=
Columns1through6
012345
0.020.0390.07320.12850.20330.2795
0.980.95250.90190.81690.69270.5438
Columns7through12
67891015
0.33120.34440.32470.28630.24180.0787
0.39950.28390.20270.14930.11450.0543
Columns13through18
202530354045
0.02230.00610.00170.00050.00010
0.04340.04080.0401
0.03990.03990.0398
2.运行结果与教材p140的内容比较。
[提示]
1)求解微分方程的数值解函数ode45,格式如下:
[t,x]=ode45('fun',ts,x0)
fun是由一个或多个待解方程写成的函数式m文件;
ts=[t0,tf]表示此微分方程的积分限是从t0到tf,也可以是一些离散的点,形式
为ts=[t0,t1,…,tf];
x0为初值条件。
2)等待用户反应命令pause:
程序执行到该命令时暂停,直到用户按任意键后继续(处
在命令窗口有效)。
3、实验内容
1.实验7-1传染病模型2(SI模型)——画di/dt~i曲线图
在matlab中建立M文件fun1.m
代码如下:
functiony=fun(x)
k=0.1;
y=k*x*[1-x];
Fun2.m
代码如下:
functiony=fun(x)
k=0.1;
y=-k*x*[1-x];
在命令行输入以下代码:
fplot('fun1',[01.100.03]);
x=fminbnd('fun2',0,1);
y=0.1*x*(1-x);
holdon;
plot([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
2.实验7-2传染病模型2(SI模型)——画i~t曲线图
在matlab中建立M文件fun22.m
代码如下:
k=0.2;
x0=0.15;
x=dsolve('Dx=k*x*(1-x)','x(0)=x0');
tt=linspace(0,31,1001);
fori=1:
1001
t=tt(i);
xx(i)=eval(x);
end
plot(tt,xx)
axis([0,31,0,1.1]);
title('图1SI模型i~t曲线');
xlabel('t(天)');
ylabel('i(病人所占比例)');
在命令行输入