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']=

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


2652792242 发表于 2021-12-4 16:28




:handshake

sjlxdn 发表于 2021-12-5 10:57

11111111111111
页: [1]
查看完整版本: python建模仿真 matlab_数学建模python matlab 编程(疾病传播模型)