Sistemas de equações diferenciais com atrasos fixos - SIRS
Anterior: Exemplo: equação diferencial com retardo | Índice: Ecologia | Próximo: Simulação e modelo de campo médio
Índice
O sistema
O exemplo a ser considerado é da biologia matemática, muitas ferramentas matemáticas utilizado na dinâmica de populações encontra-se também na dinâmica de epidemias. O objetivo deste tópico não é se aprofundar na modelagem em si, mas a utilizar como motivação para compreender melhor os sistemas de equações diferenciais com atraso baseado no artigo "Oscillations in SIRS model with distributed delays".
Uma doença do tipo SIRS é caracterizada por um tempo de infecção e um tempo de imunidade
. Isto é, um indivíduo que se infecte em um tempo
vai deterministicamente se recuperar em um tempo
, tornando-se temporariamente imune por um tempo
. Então no instante
perde a imunidade tornando-se suscetível novamente. Este sistema pode ser representado por um conjunto de equações para a fração de população infecciosa (e infectada)
e suscetível
:
Onde é a taxa de contágio por indivíduo. A fração da subpopulação em recuperação (imune) é dada por
. O primeiro termos em ambas as equações representa o contágio dos suscetíveis pelos infecciosos, daqui em diante muitas vezes será referido como:
. Os segundos termos representam a recuperação ou a perda de imunidade após
e
decorrido desde a infecção, respectivamente. Isto é:
Em outras palavras, uma fração se contagia no instante
, no instante
ela se recupera, diminuindo os infecciosos. No instante
ela perde a imunidade, aumentando a quantidade de suscetíveis. Estas equações exigem condições iniciais, matematicamente usualmente se fornece funções arbitrárias
e
no intervalo
. Porém de um ponto de vista epidemiológico, é razoável prover condições iniciais em
e dinâmicas complementares nos intervalos
e
.
somente contágio local. Utiliza-se as equações apenas com os primeiros termos, sem atraso.
Transição do estágio de infeccioso para em recuperação, ou seja, retira-se apenas o segundo termo na equação da dinâmica dos suscetíveis.
E com as condições iniciais:
Ponto de equilíbrio
Para análise dos pontos de equilíbrio uma representação integral é uma forma melhor forma de representar o sistema, pois se fizermos algo análogo ao que foi feito em Equações diferenciais com atrasos, não será possível obter nenhuma informação sobre o ponto de equilíbrio, pois aparentemente qualquer par de valores poderia representar um ponto de equilíbrio. Para a dinâmica dos infecciosos é proposto então:
A interpretação é direta, integra-se sobre sobre todos os indivíduos que se contagiaram entre o tempo e
. Estes serão os infecciosos no instante
, uma vez que todos infectados anteriormente a este tempo já estarão recuperados. A constante de integração
a princípio é arbitrária, mas espera-se que
pois não deve haver outras fontes de infecções adicionais. Complementariamente:
Pelo lado esquerdo, pode-se perceber ver que isto se refere a população que não está se recuperando, isto é , ou seja, os infectados e suscetíveis. A integral cobre os contágios que ocorreram durante
anterior. Desta forma, esta integral fornece o número de pessoas que estão no período de recuperação, logo é razoável supor que
uma vez que também não há outras fontes de pessoas em recuperação. Para um estado de equilíbrio então que a fração de contagiados em um instante
qualquer é constante, pode-se escrever
. Para
:
E para , de maneira análoga:
Uma vez que . Lembrando que
, então no estado de equilíbrio
, denotando os pontos de equilíbrio apenas como
e
, obtém-se do primeiro resultado:
E do segundo:
Assim o ponto de equilíbrio é: .
Validade da aproximação e sistema de equações sem atraso
Uma atenção especial deve ser dada a consideração de que quando foi proposto a equação integral para
. A formulação matemática do modelo sem atraso é usualmente escrito como:
Integrando a equação da dinâmica de do sistema sem atraso, de
a
, obtém-se:
Considerando no equilíbrio que :
Sendo que no equilíbrio os valores são constantes e
:
De onde é possível obter também o mesmo ponto de equilíbrio obtido anteriormente:
Outra formar de comparar as equações, é que para obter versão integral apresentada para a partir de::
É é necessário que o termo entre colchete seja zerado. Isto é, considerando que no equilíbrio e
sejam constantes:
Desta forma a condição imposta anteriormente é recuperada. Agora percebe-se que o ponto de equilíbrio é independente das condições iniciais, depende apenas dos parâmetros escolhidos e
. Por exemplo, resolvendo numericamente o sistema de equações diferenciais proposto, com os parâmetros
,
e
, e condições iniciais
, o sistema atinge o equilíbrio precisamente nos pontos calculados.
Além disto, pode-se verificar que e
, concordando com nossos cálculos analíticos. Isto implica que no equilíbrio, a população total infecciosa em um instante
é sempre dada inteiramente pelos que foram infectados durante um período anterior
, ou seja, a área dada pelo retângulo de largura
e altura
, uma vez que no equilíbrio as frações
e
são constantes. Estes resultados concordam com a suposição de que
.
Porém tentando o mesmo procedimento para a equação com atraso, obtém-se:
Utilizando a consideração , é possível obter apenas
. Para recuperar a equação original seria necessário que, de modo análogo a equação sem atraso, a seguinte igualdade fosse válida:
Isto é, de modo análogo ao caso anterior, que no equilíbrio a fração de infecciosos em um tempo seja dado inteiramente pelos que foram contagiados em um tempo
. Porém neste caso qualquer par de pontos
poderia consistir em um ponto de equilíbrio para um conjunto de parâmetros
qualquer. A dependência se torna das condições iniciais. Utilizando por exemplo condições iniciais constantes como frequentemente é utilizado na literatura de equações com atraso, a própria condição inicial se torna um ponto de equilíbrio
. Pode-se pensar que desta fração
de infecciosos , a cada instante
, uma quantidade de
de infecciosos são curados, porém outra quantidade igual
de suscetíveis são infectados, mantendo a taxa de variação zerada e a quantidade total de infecciosos constante. Assim sendo, pensando em situações reais, para um instante
, há quantidade
da fração que permanece infecciosa mesmo após
, que soma-se aos novos infectados, mantendo a fração constante. Isto é, para a equação:
Então . Para retirar esta constante, pode-se pensar que é como se no equilíbrio precisasse de
tempo para que uma pessoa infecciosa se curasse, ao invés de
. Pois após
tempo toda a população
terá sido substituída por uma nova população infecciosa isto é
, uma vez que a cada instante
tem-se que uma fração
da população suscetível sendo infectada, e outra fração
da população infecciosa que se recuperou pois foi infectada em um instante anterior
. . Reescrevendo a integral com este novo limite
Uma vez que para estas condições iniciais. Além disto, a expressão para
é análoga a equação encontrada para o ponto de equilíbrio do sistema sem atraso, isto é
. Toda discussão foi feita para condições iniciais constantes, quando se utiliza o método proposto, a análise torna-se mais complicada, mas ainda é notável que o ponto de equilíbrio depende das condições iniciais.Utilizando o conjunto de parâmetros
,
e
, para diferentes valores iniciais é possível obter:
Pode-se notar que aproximadamente:
![]() |
![]() |
![]() |
---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Lembrando da integral proposta para a condição de equilíbrio condição de equilíbrio:
Novamente , mais especificamente
. Este resultado faz sentido, pois de acordo com o procedimento proposto, não há momento em que os infecciosos iniciais
se recuperam. Durante o tempo
uma fração da população se infecta, e então esta mesma fração começa a se recuperar após
, mas os infecciosos iniciais, nunca se recuperam, funcionando como fontes permanentes de infecção. Outra forma de comparar, é que olhando o conjunto de equações diferenciais originais o termo responsável pela recuperação dos infecciosos no instante
depende da quantidade total de infecciosos no próprio instante
. No conjunto de equações com atraso, é a fração da população da população que foi contagiada em um instante anterior. Ou seja, uma fração da população que se infectou em um instante
, é a mesma que se recuperara em um instante posterior
, porém a quantidade inicial de infecciosos não se contagiou em nenhum momento desta ’linha do tempo', então também não se recuperam em nenhum momento.
Porém ainda que , quanto mais próximo a população inicial de infecciosos for de
, melhor será aproximação, Por isso a análise em torno do ponto de equilíbrio, e o próprio ponto de equilíbrio se torna uma aproximação válida apenas quando é adotado valores próximos de
para
.
Análise do ponto de equilíbrio
Obtendo a equação transcendental
Aplicando então uma perturbação nos pontos de equilíbrios, isto é: e
pode-se obter uma aproximação linear em torno do ponto de equilíbrio (uma observação é que o teste utilizando os limites leva a uma indeterminação, uma vez que não há termo linear). Então analisando o termo que chamamos de contágios:
Ignorando os termos não lineares e denotando e
:
Tem-se então:
E:
O sistema linearizado em torno do ponto de equilíbrio é então:
Reescrevendo matricialmente:
Ou ainda:
A equação característica para um sistema do tipo:
É dado por:
A função é chamada de quase-polinômio característico. Como de costume, se para para todo
, for
o sistema é assintoticamente estável.
Detalhes:
- Se não houver atraso, a equação é reduzida a
. Como para achar as raízes deve-se fazer
, obtém-se o resultado tradicional.
- Se houver apenas uma equação, e não um sistema, então os termos
serão constantes e não uma matrizes. Substituindo
:
Então:
Obtém-se o quase-polinômio característico proposto pro sistema conforme. Dessa forma, a equação transcendental característica para o sistema que estamos interessados é:
Para encontrar as raízes
Esta equação é chamada de equação característica transcendental. Uma raiz é , e a outra pode ser obtida a partir de:
Como uma raiz é , se
há um equilíbrio instável próximo ao ponto de equilíbrio.
- Observações:
- Equação transcendental: equação que contém uma função transcendental da variável que deve ser resolvida.
- Função transcendental: função que não satisfaz uma equação polinomial, em contraste com uma função algébrica, isto é, transcende a álgebra”. Um exemplo é a função exponencial.
- Função algébrica: função que pode ser definida como a raiz de uma equação polinomial.
Soluções aproximadas são obtidas por métodos gráficos conforme feito anteriormente para soluções reais em Equações diferenciais com atrasos, ou até simplesmente observando o gráfico. Mas neste caso será utilizado algoritmos.
Obtendo as raízes da equação transcendental
Método de Newton
Também conhecido como método de Newton-Raphson, aproxima a função com uma linha. Esta linha atravessa o ponto e tem inclinação igual a derivada da própria função. Matematicamente isto é:
Então encontra-se o que atravessa o eixo e o utiliza como uma nova tentativa. Ou seja o segundo ponto sobre a reta é
, então:
Para estender o método para o plano complexo, basta substituir variável real por uma variável complexa
. A partir disto, o loop é repetido.
Aplicando o método
Então sendo:
Foi utilizado um algoritmo em Python para buscar as raízes complexas. O gráfico original é . Onde
é chamado de taxa de reprodução básica. Para facilitar foi escolhido denotar
. Com poucas manipulações é possível mostrar que:
Assim para um constante pode-se variar apenas
e
. Deste modo o algoritmo proposto busca a existência de raízes com parte real positiva, isto é, o conjunto de equações apresenta comportamento instável na proximidade do ponto de equilíbrio. Esta busca ocorre para cada par de valores
na malha formada por
, onde
e
, com intervalos de
. Especificamente em cada par de valores é executado o algoritmo de Newton-Raphson com o chute inicial partindo de cada ponto possível do plano complexo dentro da região delimitada por
, com espaçamento entre os pontos de
. Isto ocorre enquanto nenhuma raiz com parte real positiva seja encontrada, além disso, é realizada no máximo
tentativas de aproximação, e é considerado
se
.
Algoritmos
O conjunto de equações diferenciais sem atraso pode ser solucionado via Mathematica:
tmax = 400; b = 0.4; ti = 5; tr = 5; sol = NDSolve[{ s'[t] == -b*s[t]*i[t] + r[t]/tr, i'[t] == +b*s[t]*i[t] - i[t]/ti, r'[t] == i[t]/ti - r[t]/tr, s[0] == 0.5, i[0] == 0.5, r[0] == 0}, {s, i, r}, {t, 0, 500}]; Plot[{i[t] /. sol, s[t]} /. sol, {t, 0, 500}, PlotRange -> {0., 1.}]
O sistema de equações diferenciais com atraso pode ser pode ser solucionado via Python utilizando o método de Euler conforme proposto :
import matplotlib.pyplot as plt import numpy as np #Função para resolver o sistema de equações diferenciais def sistema(R0,R1): #Parâmetro R0=b.ti #Parâmetro R1=tr/ti #Parâmetros da dinâmica b =4 ti=R0/b tr=R1*R0/b to=ti+tr # Listas para guardar a evolução do sistema s=[] i=[] d=0.001 #Passo para o método de Euler #Primeira parte: N1=int(ti/d) #Quantidade de passos i.append(1e-16) #Condição inicial de inectado i0 s.append(1-i[0]) #Condição inicial de suscetíveis s0=1-i0 #Resolve o sistema Usando o método de Euler for k in range(N1): s.append(s[k]+d*(-b*s[k]*i[k])) i.append(i[k]+d*(b*s[k]*i[k])) #Segunda parte N2=int(to/d) for k in range(N1,N2): s.append(s[k]+d*(-b*s[k]*i[k])) i.append(i[k]+d*(b*s[k]*i[k]-b*s[k-int(ti/d)]*i[k-int(ti/d)])) #Terceira parte N3=int(1800/d) for k in range(N2,N3): s.append(s[k]+d*(-b*s[k]*i[k]+b*s[k-int(to/d)]*i[k-int(to/d)])) i.append(i[k]+d*(+b*s[k]*i[k]-b*s[k-int(ti/d)]*i[k-int(ti/d)]))
O sistema também pode ser resolvido via Mathematica:
b = 0.8; ti = 5; to = 20; ci1 = NDSolve[{ s1'[t] == -b*s1[t]*i1[t], i1'[t] == +b*s1[t]*i1[t], s1[0] == 0.99, i1[0] == 0.01}, {s1, i1}, {t, 0, ti}]; ci2 = NDSolve[{ s2'[t] == -b*s2[t]*i2[t], i2'[t] == +b*s2[t]*i2[t] - b*s2[t - ti]*i2[t - ti], s2[t /; t <= ti] == s1[t] /. ci1, i2[t /; t <= ti] == i1[t] /. ci1}, {s2, i2}, {t, 0, to}]; sol = NDSolve[{ s'[t] == -b*s[t]*i[t] + b*s[t - to]*i[t - to], i'[t] == +b*s[t]*i[t] - b*s[t - ti]*i[t - ti], s[t /; t <= to] == s2[t] /. ci2, i[t /; t <= to] == i2[t] /. ci2}, {s, i}, {t, 0, 300}]; Plot[{i[t] /. sol, s[t] /. sol}, {t, 0, 300}, PlotRange -> {0., 1.}]
O código abaixo foi escrito em Python e é responsável por buscas raízes complexas com a parte real positiva na equação transcendental discutida anteriormente.
#Código para resolver a equação transcendental def raizes(): sol=np.zeros((35,90)) # Matriz para guardar as raízes err=1e-12 # Erro admitido sy=0 for R0 in np.arange(1,10,0.1): #Percorrer os valores RO=b. print(str(100*(sy+1)/90)+"%") sx=0 for R1 in np.arange(0,3.5,0.1): #Percorrer os valores R1=tr/ti #Parâmetros da dinâmica b =4 ti=R0/b tr=R1*R0/b to=ti+tr #Pontos de equilíbrio io=(b*ti-1)/(b*to) so=1/(b*ti) #Matriz das raízes para os parâmetros atuais r=np.zeros((20, 20)) #Os chutes iniciais serão pontos dentro da malha [-1,1] em 2D m=0 for a in np.arange(-1,1,0.1): n=0 for y in np.arange(-1,1,0.1): i=y*1j x=a+i # Ponto inicial N=10000000 # Quantidade máxima de aproximações #Valor da função para o chute inicial f=x+b*(so*(np.power(np.e,-x*ti)-1)-io*(np.power(np.e,-x*to)-1)) for k in range(N): if (k==N-2): print("!") #Indicando que chegou no último passo sem achar a raízs if (abs(f)<err): break # Se chou a raíz, do loop try: f =x+b*(so*(np.power(np.e,-x*ti)-1)-io*(np.power(np.e,-x*to)-1)) df=1+b*(to*io*np.power(np.e,-x*to)-ti*so*np.power(np.e,-x*ti)) nx=x-f/df # Próximo chute x=nx except: print(str(R0)+","+str(R1)) break if(abs(np.real(x))<err): # A raíz é zero r[m,n]=0 elif (np.real(x)>0): # Raíz positiva r[m,n]=1 break else: r[m,n]=-1 # Raíz negativa n=n+1 else: # Quando acabar o loop interno m=m+1 continue # Continua break # Se o loop interno foi encerrado antes da hora, encerra o externo res=[] for i in range(20): res.append(max(r[i])) sol[sx,sy]=max(res) # Se houve raíz positiva, obtém. sx=sx+1 sy=sy+1 #Registra f = open("raizes.dat", "w") for i in sol: for j in i: f.write(str(j)+" ") f.write("\n") f.close() raizes()
A partir dos dados gerados com o código anterior, é possível visualizá-los em R com o seguinte código:
library('tseries') #Bibliotea pra ler matriz library('plot.matrix') #Biblioteca pra plotar matriz m <- read.matrix( "Raizes.dat") #Os dados são lidos no formato de matriz m<-t(m) # São feitas algumas correções devido à ordem que os dados são gravados m <-m[90:2, 1:35] rownames(m) <- (99:11)/10 #Ajusta-se os nomes das linhas e colunas colnames(m) <- (0:34)/10 #E plota-se plot(m, col=c('black', 'white', 'green'), breaks=c(-2, -0.25,0.25, 2), xlab='R1', ylab='R0',main='Raizes',border=NA)
Principais materiais utilizados
- Oscillations in SIRS model with distributed delays (S. Gonçalves e outros, The European Physical Journal B)
- Root finding algorithms (Eugeniy E. Mikhailov, Faculdade de William e Mary)
- Stability and stabilization of time-delay systems ( Gerhard Manfred Schoen ,Instituto Federal de Tecnologia de Zurique)
Anterior: Exemplo: equação diferencial com retardo | Índice: Ecologia | Próximo: Simulação e modelo de campo médio