请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 958|回复: 2

python建模仿真 matlab_数学建模python matlab 编程(疾病传播模型)

[复制链接]
字体大小: 正常 放大

1158

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2023-7-31 10:17
  • 签到天数: 198 天

    [LV.7]常住居民III

    自我介绍
    数学中国浅夏
    发表于 2021-12-4 15:52 |显示全部楼层
    |招呼Ta 关注Ta
    例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)



    zan

    0

    主题

    1

    听众

    3

    积分

    升级  60%

    该用户从未签到

    回复

    使用道具 举报

    sjlxdn        

    1

    主题

    2

    听众

    155

    积分

    升级  27.5%

  • TA的每日心情
    无聊
    2022-2-19 17:40
  • 签到天数: 30 天

    [LV.5]常住居民I

    国际赛参赛者

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-3-29 18:56 , Processed in 0.366871 second(s), 61 queries .

    回顶部