Matlab实现新冠病毒传播模拟效果

来自:网络
时间:2022-04-16
阅读:
目录

1 各种疫苗梳理

截至2022年3月,中国已经向120多个国家和国际组织提供了超过21亿剂疫苗,占中国以外全球疫苗使用总量的1/3。

1.1 灭活疫苗

2020年12月31日,国务院联防联控机制发布,国药集团中国生物新冠灭活疫苗已获得国家药监局批准附条件上市。

1.2 吸入式新冠疫苗

2021年11月12日—14日,全球首款可吸入式新冠疫苗亮相“2021第五届海南国际健康产业博览会”。全球首款吸入式新冠疫苗由军事医学研究院陈薇院士团队与康希诺生物股份公司合作研发,二期临床试验已取得阶段性成果,正在推进紧急使用的申请工作。据了解,吸入式新冠疫苗与肌肉注射使用了同种疫苗,其制剂配方未改变,仅采用不同的给药方式。雾化吸入免疫采用雾化器将疫苗雾化成微小颗粒,通过口部吸入的方式进入呼吸道和肺部,从而激发黏膜免疫,而这种免疫是通过肌肉注射所不能带来的。

1.3 植物蛋白技术疫苗

2022年2月24日 ,加拿大卫生部宣布,授权该国药企Medicago研制的新冠疫苗Covifenz可用于18至64岁成年人。这是加拿大审批通过的第六款新冠疫苗,也是首款本土研发的新冠疫苗,Covifenz是首个使用植物蛋白技术的新冠疫苗。

1.4 AI技术开发长效新冠疫苗

2022年4月11日报道,日本NEC公司8日宣布已开始利用最尖端的人工智能(AI)技术开发新冠疫苗。

1.5 法国Valneva新冠疫苗

2022年4月14日,彭博报道,根据一份政府声明,英国药品和保健品管理局(MHRA)批准法国生物技术公司Valneva开发的新冠疫苗。Valneva疫苗成为第六种获得MHRA授权的新冠疫苗。

2 matlab代码

Matlab实现新冠病毒传播模拟效果

%======欢迎关注公众号:电力系统与算法之美=======%
function spreadingBySir()
    A=load('test.in');
    % node number
    N=size(A,1);   
    %感染概率
    irate=0.3;
    %恢复概率
    rrate=1;
    %初始时节点的状态表,初始时只有节点1为感染状态,其他的都为易感染状态  
    start_node=1;
    %按照图的广度优先的原则来进行病毒传播
    BFSspreading(A,N,start_node,irate,rrate);
end
 
function BFSspreading(A,N,start_node,irate,rrate)
%队列头
head=1;            
%队列尾,开始队列为空,tail==head
tail=1;            
%向头中加入感染源节点
queue(head)=start_node;      
%队列扩展
head=head+1;  
 
%感染节点列表 
infection=start_node;  
%恢复节点列表  
recover=[];
%易感染节点列表
for i=1:N
    %初始时,start_node为感染状态
    if i==start_node
        %-1表示该节点已经从列表中删除
        susceptible(i)=-1;
    end
    %初始时,除了start_node为感染状态外,其他节点都处于易感染状态
     susceptible(i)=i;
end
 
%开始按照广度优先搜索顺序向邻居节点传播
%判断队列是否为空
while tail~=head   
    %取队尾节点 
    i=queue(tail);  
    %如果该节点不在移除列表之中
    if isempty(find(recover==i,1))
            for j=1:N
             %如果节点j与当前节点i相连并且节点j不在感染列表中
            if A(i,j)==1 && isempty(find(infection==j,1))   
                 infection_random=rand(1);
                 if infection_random < irate
                    %新节点入列
                    queue(head)=j;  
                    %扩展队列
                    head=head+1;   
                    %将新节点j加入感染列表
                    infection=[infection j]; 
                    
                    %从易感染节点列表中删除该节点,设置为-1
                    [row,col,v] = find(susceptible==j) ;
                    susceptible(col)=-1;
                    susceptible(find(susceptible==-1))=[];                    
                 end
            end
        end
        %将感染的节点按概率加入恢复节点列表  
        recover_random=rand(1);
        if infection_random < rrate
            %恢复
            recover=[recover i];  
            %从感染列表中删除
            [row,col,v] = find(infection==i) ;
            infection(col)=-1;
            infection(find(infection==-1))=[];
        end
        tail=tail+1; 
        
    end %end if  isempty(find(recover==i,1)
end %end while
 
%分别现实最后节点的状态
infection
susceptible
recover
end
 
返回顶部
顶部