数学建模社区-数学中国

标题: python建模仿真 matlab_数学建模python matlab 编程(疾病传播模型) [打印本页]

作者: 1047521767    时间: 2021-12-4 15:52
标题: 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']=[u'simHei']

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[0]=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[p]==0 and random.random()<0.5:

is_ill[p]=1ill_n+= 1plt.plot(x,y)


我的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');




老师的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=[y(2:d)];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) %%%画出患病人数曲线图。



老师的matlab代码2

clear

t=1:240;

y=800./(1+799.*exp(-0.09176.*t));

plot(y)



老师的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=[y(2:d)];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)



老师的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=[y(2:d)];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)




作者: 2652792242    时间: 2021-12-4 16:28





作者: sjlxdn    时间: 2021-12-5 10:57
11111111111111





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5