我想使用 SDEint 包给出以下随机 SIR 模型的数值解(绘图)。即,SDE 系统。
这是我到目前为止一直在尝试的代码。下面我将解释我的问题。
import matplotlib.pyplot as plt
import numpy as np
import sdeint
tspan = np.linspace(0, 5, 1001)
y0 = np.array([900/1000, 100/1000, 0.,])
S = y0[0]
I = y0[1]
R = y0[2]
def f(y, t):
f0 = -.80*S*I
f1 = .80*S*I - 1.1*I
f2 = 1.1*I
return np.array([f0, f1, f2,])
def G(y,t):
return np.array([[-0.9*S*I, 0, 0],
[0.9*S*I, 0, 0],
[0,0,0]])
result = sdeint.itoint(f, G, y0, tspan )
plt.plot(result)
plt.show()
和受到相同噪音的影响,以前我使用过 np.diag 但那是针对独立的 Wiener 进程但它们在这里不是独立的,它们应该是相同的。也就是说,如果我只看系统的扩散部分,我可以写成
不确定如何将其输入我在我的代码中的 G 定义中使用以下矩阵/数组
当乘以三个维纳过程的列向量时,将产生我上面想要的结果。
我在运行脚本时注意到的关键问题是,我得到了绘制的路径,特别是, 它下降到下面情况并非如此,这些数值解应该保持非负。
我的第二个问题是绘制的路径和是作为彼此的反射出来的,这不应该完全是这种情况,因为它们在各自的定义中是不对称的。
任何输入,或对另一个包或方法的建议表示赞赏。