zoukankan      html  css  js  c++  java
  • 数学建模python matlab 编程(疾病传播模型)

    例12:一只游船上有800(1000)人,一名游客不慎患传染病,12(10)小时后有3人发病,由于船上不能及时隔离,问经过60(30)小时,72小时,患此病的人数。(与人口模型和Logistic模型类似)

    先用python和matlab模拟

    我的python代码

    # -*- coding: utf-8 -*-
    import numpy as np
    import random
    import matplotlib
    matplotlib.rcParams['font.sans-serif']=[u'simHei']
    matplotlib.rcParams['axes.unicode_minus']=False
    import pandas as pd
    import matplotlib.pyplot as plt
    
    p_size=10000
    get_ill_p = 0.1
    
    is_ill = np.zeros(p_size)
    is_ill[0]=1
    ill_n =1
    x=[]
    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 += 1
    plt.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)<get_ill_p
                    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)
    

  • 相关阅读:
    添加语句<tx:annotation-driven transaction-manager="txManager"/>报错
    ssh学习(1)
    C.Sum 2017 ACM-ICPC 亚洲区(西安赛区)网络赛
    Problem 1004-2017 ACM/ICPC Asia Regional Shenyang Online
    Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛- A. Banana
    HDU 1052 Tian Ji -- The Horse Racing(贪心)
    HDU 1236 排名
    HDU 2550 百步穿杨
    HDU 1084 What Is Your Grade?(排序)
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/11193338.html
Copyright © 2011-2022 走看看