数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-5-14 21:54
标题: 数学建模python matlab 编程(疾病传播模型)
数学建模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

7 R( ^" F* `( L' O+ ^' f/ d
1 ?# V0 A6 o; n) Y3 x




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