Нечетная ошибка интеграции SciPy ODE
Реализация очень простой модели Susceptible-Infected-Recovered с постоянной популяцией для проекта на холостом ходу - обычно довольно тривиальная задача. Но я'я сталкиваюсь с ошибками решателя, используя либо PysCeS, либо SciPy, оба из которых используют lsoda в качестве своего основного решателя. Это происходит только для определенных значений параметра, и яЯ озадачен, почему. Код ям с использованием следующего:
import numpy as np
from pylab import *
import scipy.integrate as spi
#Parameter Values
S0 = 99.
I0 = 1.
R0 = 0.
PopIn= (S0, I0, R0)
beta= 0.50
gamma=1/10.
mu = 1/25550.
t_end = 15000.
t_start = 1.
t_step = 1.
t_interval = np.arange(t_start, t_end, t_step)
#Solving the differential equation. Solves over t for initial conditions PopIn
def eq_system(PopIn,t):
'''Defining SIR System of Equations'''
#Creating an array of equations
Eqs= np.zeros((3))
Eqs[0]= -beta * (PopIn[0]*PopIn[1]/(PopIn[0]+PopIn[1]+PopIn[2])) - mu*PopIn[0] + mu*(PopIn[0]+PopIn[1]+PopIn[2])
Eqs[1]= (beta * (PopIn[0]*PopIn[1]/(PopIn[0]+PopIn[1]+PopIn[2])) - gamma*PopIn[1] - mu*PopIn[1])
Eqs[2]= gamma*PopIn[1] - mu*PopIn[2]
return Eqs
SIR = spi.odeint(eq_system, PopIn, t_interval)
Это приводит к следующей ошибке:
lsoda-- at current t (=r1), mxstep (=i1) steps
taken on this call before reaching tout
In above message, I1 = 500
In above message, R1 = 0.7818108252072E+04
Excess work done on this call (perhaps wrong Dfun type).
Run with full_output = 1 to get quantitative information.
Обычно, когда я сталкиваюсь с такой проблемой,Что-то в корне неправильно с системой уравнений, которую я настроил, но я могуничего плохого в этом не вижу. Странно, это также работает, если вы меняете му на что-то вроде1/15550
, В случае, если что-то не так с системой, ятакже реализовал модель в R следующим образом:
require(deSolve)
sir.model