閉鎖社会で感染数とかどう変化するか

# MATLABで思いつくまま感染者の数やら収束までの期間を見てみた　（いつものように素人の試行錯誤）

## 凡例
パラメータは分かるように書いたつもりだけどあまりにも投げやりなので少し補足する。
ContactN　一人の潜伏期間の感染者が１日に何人と接触するか
ContactQ　症状が出て隔離された感染者が１日に何人と接触するか
Incubation 潜伏期
DiseaseD 症状がある期間
で、この最終日に助かるか（RN)助からないか（DN)に振り分けている
IR 潜在期間が終わって顕在化する確率
DR　致死率
RN　社会の中で免疫を獲得した人数
DR　社会の中で助からなかった人数
InfectionR1　潜伏期間の感染者が誰かと会ってどれくらい感染させるか率
InfectionR2　隔離された感染者が誰かと会ってどれくらい感染させるか率
DiseaseN　潜伏期１日目から退院日までの配列
今回の初期値では潜伏期間の感染者は１日当たりが３人ずつ、発症者１日目を２０人にとった。なんとなく、ここが変わると全体も変わる。

スペルミスとかあるとは思う。根本的な考え違いもあるかもしれない。

結果としてみたいと思ったのは、発症していない感染者のピーク日（d1）、発症した感染者のピーク日（d2）、収束日（d3）。一人当たりの接触数（ContactN)と潜伏期間（Incubation)をいくつか変えてみた。パラメータを変えての結果はd1M,d2M,d3M。他は固定したけど、気が向いたら変えてみます。

## MATLAB code (modoki)

```m:HFLF.m
%%
ContactNM=[5 10 15 20 25] % mean contact number for one day before quarantine 
IncubationM=[8 11 14]; %Incubation period (days)
ContactQ = 5; % mean contact number for one day after quarantine (medial staff and family members)
DiseaseD = 10; % mean disease duration for each patients with symptoms
IR= 60/100; % Rate for getting Illness (fever cough) 
DR = 2/100; % Death rate
InfectR1 = 1/100 % mean infection rate for each contact before quarantine
InfectR2 = 2/100 % mean infection rate for each contact after quarantine
figure(1);clf
for j = 1:size(ContactNM,2)
for k = 1:size(IncubationM,2)
     ContactN=ContactNM(j)
     Incubation=IncubationM(k)
     DiseaseN = [ones(1,Incubation)*3 20 zeros(1,DiseaseD-1)]; % Initial number of patients in matrix
     n1 = InfectR1 * Incubation * ContactN % Infection number per person before quarantine
     n2 = InfectR2 * DiseaseD * ContactQ % Infection number per person after quarantine
     Population0 = 10000000; % TOKYO, JAPAN, as closed city
     DN= 0; % total death number
     RN=0; % total immuned number
     Day = 0; 
    sum1max=0; sum2max=0;
    d= 0; % Initial day     
    d1=0;d2=0;d3=0;
    for i = 1:365
        d= d +1;
        sum1=int32(sum(DiseaseN(1:Incubation))); % before quarantine
        sum2=int32(sum(DiseaseN(Incubation+1:Incubation+DiseaseD))); % after quarantine
        if sum1 > sum1max
            sum1max = sum1;d1=d;
        else sum1max = sum1max;d1=d1;
        end
        if sum2 > sum2max
            sum2max = sum2;d2=d;
        else sum2max = sum2max;d2=d2;
        end
        if sum1 + sum2 ==0
            d3(d)=d;
        end
        N = Population0 - sum1 - sum2 - DN - RN;    % population without immune for Corona
        if N < 0
            N = 0;
            return;
        end
        IN1 = int32(sum1 * ContactN * InfectR1 * (N/Population0)); 
        IN2 = int32(sum2 * ContactQ * InfectR2 * (N/Population0));
        IN = IN1 + IN2;
        EN=DiseaseN(Incubation+DiseaseD); % one day before discharged from hospital; judge alive or death on the day
        DN = DN + int32(EN*DR);
        RN = RN + int32(EN*(1-DR))+ int32(DiseaseN(Incubation+1)*(1-IR));
        DiseaseN=[IN DiseaseN(1:Incubation+DiseaseD-1)];
        DiseaseN(Incubation+1)= DiseaseN(Incubation+1)*IR; % multiply the rate of getting illness
        subplot(size(ContactNM,2),size(IncubationM,2),(size(IncubationM,2)*(j-1)+k))
        plot(d,sum1,'.b');hold on
        plot(d,sum2,'.r');
    end
    DNM(j,k)=DN;nn(j,k)=n1;
    sum1maxM(j,k)=sum1max; sum2maxM(j,k)=sum2max;    
    d1M(j,k)=d1;d2M(j,k)=d2;d3M(j,k)=365-size(d3(d3>0),2);
 end
 end
```
## 結果グラフ
![CoronaVirus1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237763/9cddd32a-c684-3269-cf04-27cce1a5e3bd.png)
CNは一人当たりの接触人数、Incは潜伏期間
横は何日目か
縦は青が潜伏期間の数、赤が発症した数
ちなみにDNはCN=5だと3300人くらいまでで、CN>5だと70000台

## 考察
パラメータはいろいろ変えられるようにしてあると思う。
今回の条件だと、個人が1日に接触する人が少なくて、潜伏期間が長かった場合、1年ではピークにならない。というか、パンデミとは言わないレベルなのかも。逆に、個人が1日に接触する人が多いと、ピークは早く、収束も早い。今回のパラメーター内では３～４か月。中間だと６～７か月。もちろん、人の行き来とか治療とか、隔離できるかとか全く想定していないので、現実とは大きく異なると思う。