python建模仿真 matlab_数学建模python matlab 编程(疾病传播模型)
例12:一只游船上有800(1000)人,一名游客不慎患传染病,12(10)小时后有3人发病,由于船上不能及时隔离,问经过60(30)小时,72小时,患此病的人数。(与人口模型和Logistic模型类似)先用python和matlab模拟
我的python代码
#-*- coding: utf-8 -*-
importnumpy as npimportrandomimportmatplotlib
matplotlib.rcParams['font.sans-serif']=
matplotlib.rcParams['axes.unicode_minus']=Falseimportpandas as pdimportmatplotlib.pyplot as plt
p_size=10000get_ill_p= 0.1is_ill=np.zeros(p_size)
is_ill=1ill_n=1x=[]
y=[]for time in range(100):
x.append(time)
y.append(ill_n)#遍历每一个交往的人数
for i inrange(ill_n):#交往的人数再0-2个人内
renshu = np.random.randint(0,2)for j inrange(renshu):#随机挑一个人
p =np.random.randint(0,p_size)#如果p没患病
if is_ill==0 and random.random()<0.5:
is_ill=1ill_n+= 1plt.plot(x,y)
https://img-blog.csdnimg.cn/img_convert/d24a9db8da8ab2b7f9b392b8d7896975.png
我的matlab代码
clear;
p_size=10000;
get_ill_p = 0.1;
is_ill = zeros(1,p_size);
is_ill(1)=1;
ill_n =1;
y(1)=1;
for time =1:150
y(time)=ill_n;
% 遍历每一个交往的人数
for i =1:ill_n
% 交往的人数再0-2个人内
renshu = randperm(2,1); % 产生0到2内的随机整数
for j =1:renshu
% 随机挑一个人
p = randperm(p_size,1); % 产生0到p_size内的随机整数
% 如果p没患病
if is_ill(p)==0 && rand(1)
is_ill(p)=1;
ill_n = ill_n+ 1;
end
end
end
end
plot(y,'o');
https://img-blog.csdnimg.cn/img_convert/b7a281402c3b389319b2fa08a09f2e4e.png
老师的matlab代码1
clear
d=800; %%%总的患病人数。
y=ones(1,d);%%%“1”表示健康的人。
y(1)=0; %%%第1个人患病了。
for n=1:240 %%%考虑200个时间单位后的情况。
y=y(randperm(d)); %%%将y的顺序打乱。
z=;z(d)=y(1); %%%考虑 y 后面一个人, 最后一个人的后面拟定为第一个人。
%%%每一个人可随机与另一个人接触,在一维中足够可表达这个意思.
R=find((y==0)&z==1); %%%找出患者即将传染的人。只有健康的人才会成为新的患者。
for k=1:size(R,2) %%%size(R,2)为第 n 个单位时间的总的“传播机会”.
w=randperm(15);p=(w(1)>=2); %%%不是只要一个健康的人接触患者就会成为病人的。传染病有感染程度的不同。
z(R(k))=1.*p;
end
y=z; %%%经过一个时段后新的分布产生了。
s(n)=numel(find(z==0)); %%%计算总的患病人数。
end
s;plot(s) %%%画出患病人数曲线图。
https://img-blog.csdnimg.cn/img_convert/e0cb2628c9f7eb77b0255462aaa9aac1.png
老师的matlab代码2cleart=1:240;y=800./(1+799.*exp(-0.09176.*t));plot(y)
https://img-blog.csdnimg.cn/img_convert/76a3c764f3a98bb0aec332f04116682b.png
老师的matlab代码3
clear
d=800; %%%总的患病人数。
y=ones(1,d);%%%“1”表示健康的人。
y(1)=0; %%%第1个人患病了。
for n=1:240 %%%考虑200个时间单位后的情况。
y=y(randperm(d)); %%%将y的顺序打乱。
z=;z(d)=y(1); %%%考虑 y 后面一个人, 最后一个人的后面拟定为第一个人。
%%%每一个人可随机与另一个人接触,在一维中足够可表达这个意思.
R=find((y==0)&z==1); %%%找出患者即将传染的人。只有健康的人才会成为新的患者。
for k=1:size(R,2) %%%size(R,2)为第 n 个单位时间的总的“传播机会”.
w=randperm(15);p=(w(1)>=2); %%%不是只要一个健康的人接触患者就会成为病人的。传染病有感染程度的不同。
z(R(k))=1.*p;
end
y=z; %%%经过一个时段后新的分布产生了。
s(n)=numel(find(z==0)); %%%计算总的患病人数。
end
s;plot(s) %%%画出患病人数曲线图。
s(72)
https://img-blog.csdnimg.cn/img_convert/ac11a6e39498c8a61d41a6df51ad9cb4.png
老师的matlab代码4
clear
d=800; %%%总的患病人数。
y=ones(1,d);%%%“1”表示健康的人。
y(1)=0; %%%第1个人患病了。
for n=1:240 %%%考虑200个时间单位后的情况。
y=y(randperm(d)); %%%将y的顺序打乱。
z=;z(d)=y(1); %%%考虑 y 后面一个人, 最后一个人的后面拟定为第一个人。
%%%每一个人可随机与另一个人接触,在一维中足够可表达这个意思.
R=find((y==0)&z==1); %%%找出患者即将传染的人。只有健康的人才会成为新的患者。
for k=1:size(R,2) %%%size(R,2)为第 n 个单位时间的总的“传播机会”.
w=randperm(11);p=(w(1)>=2); %%%不是只要一个健康的人接触患者就会成为病人的。传染病有感染程度的不同。
z(R(k))=1.*p;
end
y=z; %%%经过一个时段后新的分布产生了。
s(n)=numel(find(z==0)); %%%计算总的患病人数。
end
s;plot(s) %%%画出患病人数曲线图。
s(72)
https://img-blog.csdnimg.cn/img_convert/9573c60e0d8db2c789519cf709f08375.png
:handshake
11111111111111
页:
[1]