数学建模python matlab 编程(疾病传播模型) 例12:一只游船上有800(1000)人,一名游客不慎患传染病,12(10)小时后有3人发病,由于船上不能及时隔离,问经过60(30)小时,72小时,患此病的人数。(与人口模型和Logistic模型类似) 先用python和matlab模拟 我的python代码 # -*- coding: utf-8 -*-import numpy as npimport randomimport matplotlibmatplotlib.rcParams['font.sans-serif']=[u'simHei']matplotlib.rcParams['axes.unicode_minus']=Falseimport pandas as pdimport matplotlib.pyplot as plt p_size=10000get_ill_p = 0.1 is_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 in range(ill_n): # 交往的人数再0-2个人内 renshu = np.random.randint(0,2) for j in range(renshu): # 随机挑一个人 p = np.random.randint(0,p_size) # 如果p没患病 if is_ill[p]==0 and random.random()<0.5: is_ill[p]=1 ill_n += 1plt.plot(x,y)file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif 我的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)<get_ill_p is_ill(p)=1; ill_n = ill_n+ 1; end end endendplot(y,'o');file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif 老师的matlab代码1 cleard=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)); %%%计算总的患病人数。ends;plot(s) %%%画出患病人数曲线图。file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif 老师的matlab代码2 cleart=1:240;y=800./(1+799.*exp(-0.09176.*t));plot(y)file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif 老师的matlab代码3 cleard=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)); %%%计算总的患病人数。ends;plot(s) %%%画出患病人数曲线图。s(72)file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif 老师的matlab代码4 cleard=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)); %%%计算总的患病人数。ends;plot(s) %%%画出患病人数曲线图。s(72)file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif 转载于:https://www.cnblogs.com/caiyishuai/p/11193338.html
8 Q- H8 v2 t k
; v8 v' A( ?8 ~% w |