Anda di halaman 1dari 6

MAP-2121 - Primeiro exercı́cio programa - 2010

Modelos Populacionais

Instruções gerais -
Os exercı́cios computacionais pedidos na disciplina Cálculo Numérico têm
por objetivo fundamental familiarizar o aluno com problemas práticos que re-
queiram técnicas numéricas em sua solução. Neste programa sua tarefa será im-
plementar dois algoritmos simples para resolver equações diferenciais e aplicá-los
em simulações de modelos populacionais.
Seu programa deve ser entregue no sistema Paca em http://map2121.ime.
usp.br até o dia 10 de outubro. Não deixe para fazê-lo no final do prazo.
O programa deve ser escrito em Linguagem C e ser compilado e executado
com o compilador disponı́vel através da página da disciplina (www.ime.usp.br/
~map2121). Caso você desenvolva seu programa em outro compilador, confira
se ele também compila e executa no Devc++ indicado. Programas que não
compilarem terão notas muito baixas. Não deixe de comentar seu programa, os
comentários serão considerados na correção.
Ao desenvolver seu projeto você possivelmente trocará idéias com seus cole-
gas. Esta interação é saudável e desejável, vocês estarão aprendendo mais. O
seu programa deve no entanto ser desenvolvido por você individualmente, para
que você realmente saiba fazê-lo. Haverá controle de cópias e caso estas sejam
detectadas, os envolvidos terão nota zero no programa.
Bom trabalho!

Introdução-
Em uma equação diferencial procura-se determinar uma função x(t) satisfa-
zendo uma relação do tipo:
x′ (t) = f (t, x(t)) (1)
No caso geral x(t) é uma função definida em algum intervalo real, tomando
valores em Rm (ou seja, x(t) = (x1 (t), x2 (t), ..., xm (t)), onde cada xi (t) é uma
função real). A função f (t, x(t)) é definida em Rm+1 e assume valores em Rm .
Um exemplo é dado pela equação x′ (t) = λx(t), cuja solução geral é dada
por x(t) = ceλt , onde c é uma constante qualquer. Esta constante, e por-
tanto a solução, fica unicamente determinada se prescrevermos um valor inicial
x(t0 ) = x0 . Obtem-se c = x0 e−λt0 . Este é um primeiro exemplo de um modelo
populacional, onde o crescimento do tamanho da população é proporcional ao
número de indivı́duos.
Nem sempre é possı́vel resolver equações diferenciais de forma analı́tica,
sendo portanto necessário o uso de métodos numéricos. Equações diferenciais
são vitais para a modelagem de inúmeros fenômenos e este assunto tem por-
tanto grande relevância. Apresentaremos a seguir dois métodos para solução

1
numérica de equações diferenciais. Vamos ter por hipótese que as soluções são
suficientemente diferenciáveis em nossa apresentação.
Método de Euler
Considerando o polinômio de Taylor da função x(t) obtemos:

x(t + h) = x(t) + x′ (t)h + x′′ (t̃)h2 /2

onde t̃ se encontra entre t e t + h. Desta expressão temos:

x(t + h) − x(t)
= x′ (t) + x′′ (t̃)h/2
h
Se agora impusermos que x(t) é solução da equação diferencial (1) obtemos
que:
x(t + h) − x(t)
= f (t, x(t)) + x′′ (t̃)h/2
h
O método de Euler irá empregar a aproximação

x(t + h) − x(t)
= f (t, x(t))
h
sendo o erro cometido proporcional a h. Partindo do instante inicial t0 onde
conhecemos o valor inicial x0 da solução, calcularemos sucessivamente as apro-
ximações
xi+1 = xi + hf (ti , xi )
onde ti = t0 + ih, e xi é a aproximação de x(ti ). Calculamos a solução até
um instante final tf em n passos, onde nh = tf − t0 . Por exemplo, na equação
x′ (t) = x(t) com x(0) = 1, temos a sequência xi+1 = xi + hxi = (1 + h)xi . Se
tomamos tf = 1 e h = 1/n obtemos a aproximação para o valor de x(1):

xn = (1 + h)xn−1 = (1 + h)n x0 = (1 + 1/n)n

Sabemos que a solução da equação é x(t) = et e portanto x(1) = e. Vocês já


viram em cálculo que limn→∞ (1 + 1/n)n = e. Assim, a aproximação obtida pelo
método de Euler para o valor da solução no instante 1 converge para o valor exato
se fizermos o espaçamento h = 1/n entre dois instantes consecutivos tender a
zero. Resumindo, se desejamos aproximar a solução da equação diferencial
(1) no intervalo de tempo [t0 , tf ], subdividimos este intervalo em n partes de
comprimento h = (tf − t0 )/n e aproximamos a solução em cada instante ti =
t0 + ih, i = 0, ..., n, a partir de seu valor inicial x0 , computando:

xi+1 = xi + hf (ti , xi ), i = 0, ..., n − 1

2
O Método de Runge-Kutta de quarta ordem
O método de Euler é bastante simples e fácil de implementar, porém apre-
senta uma convergência lenta, com o erro da ordem de h. Há métodos para
solução de equações diferenciais que convergem muito mais rapidamente. Um
método clássico, muito utilizado, é o método de Runge-Kutta de quarta ordem
(com erro da ordem de h4 ). Neste método cada passo no tempo é calculado
da seguinte forma (com a mesma notação usada no método de Euler), em 4
estágios:

xi+1 = xi + h ∗ (k1 + 2k2 + 2k3 + k4 )/6, onde


k1 = f (ti , xi )
k2 = f (ti + 0.5h, xi + 0.5h ∗ k1 )
k3 = f (ti + 0.5h, xi + 0.5h ∗ k2 )
k4 = f (ti + h, xi + h ∗ k3 )

Veja que cada passo no tempo requer 4 avaliações da função f , uma em cada
estágio. Você encontra no livro texto do curso uma descrição mais detalhada
sobre métodos de Runge-Kutta, incluindo uma dedução de um método de ordem
2. A derivação do método acima é obtida de maneira análoga, sendo porém
muito mais trabalhosa (e normalmente omitida nos livros didáticos).

O modelo logı́stico
O modelo exponencial de crescimento não é muito realista, pois pressupõe
que uma população se multiplique indefinidamente à mesma taxa, independen-
temente dos recursos naturais disponı́veis. O modelo logı́stico, leva em consi-
deração a limitação de recursos naturais, considerando uma taxa de crescimento
que irá depender de como a população evolui. O crescimento é modelado pela
equação:
x(t)
x′ (t) = λx(t)(1 − ),
M
onde M é um valor positivo de saturação da população. Se x(t) é pequeno então
x′ (t) ≈ λx(t), ou seja o crescimento é aproximadamente exponencial. Conforme
o valor de x(t) se aproxima de M a velocidade de crescimento diminui, com
a população tendendo a um valor de equilı́brio. Para esta equação, é possı́vel
encontrar uma forma analı́tica para a solução, dada por
M
x(t) = ,
1+ ( xM0 − 1)e−λt

onde x0 é o tamanho inicial da população em t = 0. Verifique que x(t) é solução


da equação diferencial, que sua derivada é máxima quando x(t) = M/2 e que o
tamanho da população tende ao valor de equilı́brio M com o passar do tempo.

O modelo presa-predador

3
Vamos considerar agora um ambiente em que convivam duas espécies, uma
que se alimenta dos recursos naturais (digamos, uma população de coelhos) e
uma segunda espécie que se nutre basicamente da primeira espécie (digamos,
uma turma de raposas que se alimenta dos coelhos). As equações deste modelo
são dadas por:

x′ (t) = λx(t)(1 − x(t)/M ) − αx(t)y(t)


y ′ (t) = βx(t)y(t) − γy(t)

onde x(t) representa os coelhos e y(t) as raposas, e os parâmetros aparecendo


nas equações são todos constantes e positivos. Note que na ausência de raposas,
os coelhos terão crescimento dado pela equação logı́stica. Na ausência de coelhos
as raposas virão a perecer. Procure analisar a equação e encontrar quais são
as situações de equilı́brio (onde as populações irão se estabilizar, com ambas as
derivadas nulas). Veja que mais informações você consegue obter só de analisar
os sinais das derivadas em função do tamanho das populações.

O modelo 2 presas - 1 predador


Vamos considerar agora que mais uma espécie conviva com os coelhos e as
raposas, digamos uma população de lebres que também se alimente apenas dos
recursos naturais. Ou seja, coelhos e lebres estarão competindo pelos mesmos
recursos. Por outro lado, as raposas poderão se alimentar tanto de coelhos como
de lebres. A equação do modelo pode ser posta na forma:

x′ (t) = x(t)(B 1 − A1,1 x(t) − A1,2 y(t) − A1,3 z(t))


y ′ (t) = y(t)(B 2 − A2,1 x(t) − A2,2 y(t) − A2,3 z(t))
z ′ (t) = z(t)(B 3 − A3,1 x(t) − A3,2 y(t))

onde x(t) representa os coelhos, y(t) as lebres e z(t) as raposas. Nesta forma os
coeficientes B i e Ai,j são positivos para i = 1 e i = 2, enquanto para i = 3 são
negativos. Neste modelo, tanto as lebres como as raposas experimentam cresci-
mento do tipo logı́stico na ausência das outras espécies. Procure interpretar o
papel de cada termo nas equações. Veremos que a dinâmica deste modelo pode
ser bastante complexa.

O seu programa -
Você deve implementar os métodos de Euler e de Runge-Kutta para resolver
uma equação diferencial:

X ′ (t) = f (t, X(t)) , X(t0 ) = X0 (2)

em um intervalo [t0 , tf ], calculando as aproximações para a função m-dimensional


X(t) nos instantes ti = t0 + ih, i = 0, ..., n (com h = (tf − t0 )/n), onde

4
X(t) = (X 1 (t), X 2 (t), ..., X m (t)). A função f (t, X(t)) assume valores em Rm ,
sendo sua i-ésima componente dada por:
X
m
i i i
f (t, X) = B X − Ai,j X i X j
j=1

para i de 1 a m. Esta formulação engloba os casos dos modelos da equação


logı́stica (com m = 1), Presa-predador (com m = 2) e 2 presas e 1 predador
(com m = 3), bastando para tal definir adequadamente o vetor B e a matriz A
de coeficientes.
Assim, é possı́vel escrever um único programa, em que m é um parâmetro a
ser lido de um arquivo, bem como o valor do tempo final tf (use 0 como tempo
inicial). Tendo lido m e tf , lê-se mais m linhas do arquivo, cada uma delas
contendo os valores
X0i , B i , Ai,1 , ..., Ai,m
para i de 1 a m. Note que X0i é a população da i-ésima espécie no instante
inicial.
Para implementar a função f (t, x) escreva uma rotina que receba como ar-
gumentos o valor da dimensão m, o vetor B e a matriz A de coeficientes, e o
vetor X e devolva o vetor F dos valores da função. Com esta função não é difı́cil
escrever os métodos de Euler e Runge-Kutta.

Testando o programa - equação logı́stica


O primeiro teste do programa deve ser feito com a equação logı́stica. Use o
seguinte arquivo inicial:
1 10
50 1 0.001
(ou seja, m = 1, tf = 10, população inicial de 50 indivı́duos, coeficientes B 1 = 1
e A1,1 = 0.001). Você deve integrar o modelo de t = 0 até tf = 10, com
n = 10, 20, 40, 80, 160, 320, 640. Neste caso a solução exata é conhecida. Em
cada caso você deve calcular a norma do erro (valor máximo da diferença -
em valor absoluto - entre a solução exata e a solução aproximada, nos pontos
ti , i = 1, .., n). Calcule também a razão entre as normas dos erros para cada dois
valores consecutivos de n. Através destas razões você verá como cai o erro a
cada vez que h cai pela metade, dependendo da ordem de convergência de cada
método. Este teste também ajudará a ver se o programa está funcionando.
Resumindo: para cada um dos valores de n acima seu programa deve imprimir
a norma do erro máximo (e a razão deste valor em relação ao mesmo valor
para o n anterior), para os métodos de Euler e Runge-Kutta. Além disso, você
deveria imprimir os valores da solução ao longo do tempo, para que você possa
ver o gráfico da solução. Na versão a ser entregue, esta impressão dos valores
ao longo do tempo deve estar comentada.

Aplicações nos modelos presa - predador

5
Você deve usar o método de Runge-Kutta na integração dos modelos popu-
lacionais com 2 e 3 espécies. No modelo presa-predador adote os parâmetros
(compondo o arquivo de entrada)
2 50
50 1 0.001 0.01
10 -1 -0.005 0
integrando o modelo até o instante tf = 50, partindo de uma população inicial
de 50 coelhos e 10 raposas. O valor de n deve ser tomado inicialmente como
50 e dobrado sucessivamente até que o tamanho das populações finais obtidas
em duas integrações sucessivas não difira de mais que 10−3 . Imprima para cada
n, seu valor e o número de raposas e coelhos no instante final tf = 50. Para
melhor apreciar o comportamento do modelo é interessante observar os gráficos
de cada uma das espécies ao longo do tempo e também um gráfico coelho x
raposas, com os valores obtidos ao longo da integração (este último gráfico é o
chamado retrato de fase do sistema). Novamente, estes gráficos e seus valores
são apenas para que você observe melhor os resultados e não são para constar
na versão a ser entregue.
Para o modelo 2 presas - 1 predador adote o arquivo de entrada:
3 390
37 1 0.001 0.001 0.01
75 1 0.0015 0.001 0.001
137 -1 -0.005 -0.0005 0
integrando o modelo até tf = 390 com o método de Runge-Kutta, iniciando com
37 coelhos, 75 lebres e 137 raposas. Comece com n = 400 e vá dobrando seu
valor sucessivamente até que o tamanho das populações finais obtidas em duas
integrações sucessivas não difira de mais que 10−1 . Imprima para cada n, seu
valor e o número de raposas, lebres e coelhos no instante final tf = 390. Para
melhor apreciar o comportamento do modelo é interessante observar os gráficos.
Este modelo apresenta uma forte sensibilidade em relação aos valores iniciais.
Repita as integrações, apenas trocando o número inicial de lebres de 74 para 75.
Divirta-se!