質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

807閲覧

sirsモデル コロナに対するシミュレーションについて

itta0602

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/07/14 08:05

編集2020/07/14 08:37

こちらはsirモデルについて書いたものをsirsモデルに変えようとしています。
参考サイトを貼ります。
[リンク内容](https://rpubs.com/ktgrstsh/tokyor84   )
こちらを元に助けてもらいたいです。
sirは実際に動いたのでこれにこちらのサイトでいうrhoに関するものを付け加えていくと言った感じです。
初めて質問させてもらうので色々不備あると思いますが、よろしくお願い致します。
質問してください!

import

1from matplotlib import rcParams​ 2import matplotlib.pyplot as plt​ 3from scipy. integrate import odeint​ 456#sirモデルの常微分方程式​ 78def SIR_equation(v,t,β,γ,):​ 9 S, I, R =v​ 10 dSdt=-β*S*I 11 dIdt=β*S*I-γ*I​ 12 dRdt=γ*I 13 return [dSdt,dIdt,dRdt]​ 14for β in np.linspace(0.10,0.20,11):​ 15 for γ in np.linspace(0.10,0.20,11):​ 16 1718#初期値設定​ 19 S0=.999999928​ 20 I0=.000000071​ 21 R0=0.0​ 22 23#係数決定​ 242526#0 ≦t ≦100のあいだを1000分割​ 27 time_list=np.linspace(1,150,150)​ 2829 var_list=odeint(​ 30 SIR_equation,​ 31 [S0,I0,R0],​ 32 time_list,​ 33 args=(β,γ)​ 34)​ 35#微分方程式をここまでで解いた​ 36#var_listにはS、I、Rのそれぞれの時間に対する結果が配列で入っているので、​ 37#それらを分けて配列(_1ist)に収納​ 38 S_list = var_list [:,0] ​ 39 I_list = var_list [:,1] ​ 40 R_list = var_list [:,2] ​ 41 tot_list = S_list + I_list + R_list​ 4243#精題にプロットできるよう色々工夫してみる​ 4445 plt.xlabel("time")​ 46 plt.xlim(0,100)​ 47 plt.ylim(0,1)​ 48 plt.ylabel("population ratio")​ 49 plt.fill_between(time_list, tot_list,label ="population",alpha = 0.5)​ 50 #plt.fill_between(time_list, S_list,label = "Susceptible",alpha = 0.5)​ 51 #plt.fill_between(time_list, R_list,label = "Recovered",alpha = 0.5)​ 52 plt.fill_between(time_list, I_list,label="Infected",alpha = 0.5)​ 53 plt.fill_between(time_list, I_list+R_list,label="Infected(cumulative)",alpha = 0.5)​ 545556 plt.legend(loc ='center right')​ 57 plt.title(r"SIR model ($\beta=%.2f,\gamma=%.2f$)"%(β,γ))​ 58 plt.savefig(r"SIR_model_beta=%.2f_gamma=%.2f.png"%(β,γ))​ 59 plt.close()​ 60 61コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/07/14 08:47

前回の質問と同じようですが質問文は修正できます。 前回の質問を修正し、この質問は削除依頼をかけてください。
itta0602

2020/07/14 09:06

わかりました!canさんはこちらの質問わかりますでしょうか?
can110

2020/07/14 09:14

いえ。専門外なので分かりません。 ひとつアドバイスするとすれば、専門外の人(理系高校生レベルくらい)に分かるように sir、sirsモデルおよびその違いについて、かいつまんで説明してもらうと回答得られやすくなると思います。
itta0602

2020/07/14 09:48

ありがとうございました
Penpen7

2020/07/14 10:04 編集

dSdt=-β*S*I dIdt=β*S*I-γ*I​ dRdt=γ*I にρR項を文字通り付け足せばいいだけだと思うのですが、違うんですか?
Penpen7

2020/07/14 10:07

def SIR_equation(v,t,β,γ,): は def SIR_equation(v,t,β,γ,ρ): としたかったのですかね?
guest

回答1

0

ベストアンサー

「文字通り」ρを加えればいいだけの話でしょう。
(各定数は参考URLに準拠, for文は簡単化のため削除)

python

1from matplotlib import rcParams 2import matplotlib.pyplot as plt 3from scipy. integrate import odeint 4import numpy as np 5 6 7def SIRS_equation(v, t, β, γ, ρ): 8 S, I, R = v 9 dSdt = -β*S*I+ρ*R 10 dIdt = β*S*I-γ*I 11 dRdt = γ*I-ρ*R 12 return [dSdt, dIdt, dRdt] 13 14ρ=0.01 15β=1.0 16γ=0.1 17S0 = .9999999 18I0 = 1-S0 19R0 = 0.0 20time_list = np.linspace(0, 150, 150) 21 22var_list = odeint( 23 SIRS_equation, [S0, I0, R0], time_list, args=(β, γ, ρ)) 24S_list = var_list[:, 0] 25I_list = var_list[:, 1] 26R_list = var_list[:, 2] 27tot_list = S_list + I_list + R_list 28 29# 精題にプロットできるよう色々工夫してみる 30 31plt.xlabel("time") 32plt.xlim(0, 100) 33plt.ylim(0, 1) 34plt.ylabel("population ratio") 35plt.fill_between(time_list, tot_list, label="population", alpha=0.5) 36plt.fill_between(time_list, I_list, label="Infected", alpha=0.5) 37plt.fill_between(time_list, I_list+R_list, label="Infected(cumulative)", alpha=0.5) 38plt.legend(loc ='center right') 39plt.title(r"SIRS model ($\beta=%.2f,\gamma=%.2f, \rho=%.2f$)"%(β, γ, ρ)) 40plt.savefig(r"SIRS_model_beta=%.2f_gamma=%.2f_rho=%.2f.png" %(β, γ, ρ)) 41plt.close()

イメージ説明

投稿2020/07/14 11:04

Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itta0602

2020/07/14 11:49

ありがとうございます! とても助かりました! for 文も同様にして入れたらいいですよね??
Penpen7

2020/07/14 16:15

ρ=0.01 β=1.0 γ=0.1 を for ρ for β for γ に置き換えればいいでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問