Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anteriorRevisão anteriorPróxima revisão | Revisão anterior | ||
exercicios:calc1 [2012/05/11 02:53] – [Equação Diferencial Ordinária] shalom | exercicios:calc1 [2024/01/09 18:18] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 8: | Linha 8: | ||
Essa equação pode ser lida como "qual é a função y(t) cuja derivada é igual a duas vezes ela mesma?" | Essa equação pode ser lida como "qual é a função y(t) cuja derivada é igual a duas vezes ela mesma?" | ||
- | Resolver uma equação dessas pode ser bastante trabalhoso ((existem pelo menos umas 3 matérias no IME relacionadas a isso!)). Mas se uma inspiração sobrenatural te disser que "a resposta é $\exp(2x)$", | + | Resolver uma equação dessas pode ser bastante trabalhoso.((existem pelo menos umas 3 matérias no IME relacionadas a isso!)) Mas se uma inspiração sobrenatural te disser que "a resposta é $\exp(2x)$", |
Se $y(t)=\exp(2x)$, | Se $y(t)=\exp(2x)$, | ||
Linha 49: | Linha 49: | ||
plot2d(10*exp(0.2*t), | plot2d(10*exp(0.2*t), | ||
+ | |||
+ | ===== Outra função simples ===== | ||
+ | {{: | ||
+ | Vamos pensar em outro caso, onde a taxa de variação instantânea é positiva e tende a zero quando o valor da nossa variável aproxima a um. Em outras aumenta muito quando o valor e pequeno e muito pouco quando o valor aproxima-se a um. | ||
+ | |||
+ | $$ f(x)=f(x)* (1-f(x)) $$ | ||
+ | |||
+ | < | ||
+ | ' | ||
+ | ode2(%, | ||
+ | </ | ||
+ | |||
+ | Talvez não reconheça essa função, faça exponenciação de ambos os lados que ela parecerá mais simpática. Ela é a solução do exemplo anterior multiplicada por uma expressão que funciona como um freio que aperta mais forte conforme chega perto de um. Elá é a base dos modelos logísticos populacionais. | ||
+ | |||
| | ||
====== Soluções Numéricas ====== | ====== Soluções Numéricas ====== | ||
- | Essa duas funções diferenciais | + | Essas primeiras equações diferencial |
- | O processo básico é bem simples, muito parecido com o que fizemos para resolver as derivadas, mas tem muitas técnicas | + | O processo básico é bem simples, muito parecido com o que fizemos para resolver as derivadas, mas existem |
===== Método de Euler ===== | ===== Método de Euler ===== | ||
Linha 68: | Linha 82: | ||
Podemos usar um intervalo de tempo arbitrário, | Podemos usar um intervalo de tempo arbitrário, | ||
- | * $\frac{N_{t + 0.1} - N_t}{0.1}= 2N$ | + | * $\frac{N_{t + 0.1} - N_t}{0.1}\approx |
- | Ou seja, sendo que N(0) =20 no tempo = 0.01, temos que: | + | Ou seja, sendo que $N(0)=20$, no tempo 0.1, temos que: |
- | * $N_{t + 0.1} = 20 * 0.1 + 20 $ | + | * $N_{t + 0.1} - N_t= 2N * 0.1$ |
- | * $ N(0.1) = 22 $ | + | * $N_{t + 0.1} = 2N_t*0.1 + N_t$ |
+ | * $N_{t + 0.1} = 40 * 0.1 + 20 $ | ||
+ | * $N(0.1) = 24 $ | ||
- | Podemos repetir isso para os próximos intervalos de tempo. Vamos ver como funciona | + | No tempo 0.2, temos que: |
+ | |||
+ | * $N_{0.1 + 0.1} - N_0.1 = 2N_0.1 * 0.1$ | ||
+ | * $N_{0.1 + 0.1} = 2 * 24 *0.1 + 24$ | ||
+ | * $N_{0.1 + 0.1} = 48 * 0.1 + 24 $ | ||
+ | * $N(0.2) = 28.4 $ | ||
+ | |||
+ | E assim por diante .... | ||
+ | $\lim\limits_{x \to \infty} f(x)$ | ||
+ | Note que quanto menor o intervalo de tempo que usamos melhor é a precisão da nossa aproximação, | ||
+ | Podemos repetir isso para os próximos intervalos de tempo no {{: | ||
< | < | ||
- | # Lembre que dy/dt = f(y, t) no caso geral | + | f <- function (N, t) |
- | # Vamos criar essa f: | + | { |
- | f <- function (N, t) { | + | return (2*N) |
- | return (2*N); | + | |
} | } | ||
# No tempo inicial, N vale 20: | # No tempo inicial, N vale 20: | ||
- | N0 <- 20; | + | N0 <- 20 |
# O passo de tempo eh dt. Vamos rodar ateh tmax | # O passo de tempo eh dt. Vamos rodar ateh tmax | ||
dt <- 0.1 | dt <- 0.1 | ||
- | tmax <- 2; | + | tmax <- 2 |
- | euler <- function (f, N0, dt, tmax) { | + | euler <- function (f, N0, dt, tmax) |
+ | { | ||
# res vai retornar o vetor com todos os Ns | # res vai retornar o vetor com todos os Ns | ||
- | res <- NULL; | + | res <- NULL |
- | N <- N0; | + | N <- N0 |
- | for (tempo in seq(0, tmax, dt)) { | + | for (tempo in seq(0, tmax, dt)) |
+ | | ||
N <- N + f(N, | N <- N + f(N, | ||
res <- rbind(res, N) | res <- rbind(res, N) | ||
Linha 101: | Linha 128: | ||
# Examine a solucao numerica: | # Examine a solucao numerica: | ||
- | numerica <- euler(f, N0, dt, tmax); | + | numerica <- euler(f, N0, dt, tmax) |
x<- seq(0, tmax, dt) | x<- seq(0, tmax, dt) | ||
# A solucao correta da EDO: | # A solucao correta da EDO: | ||
- | plot(x, 20*exp(2*x), | + | plot(x, 20*exp(2*x), |
# Vamos comparar com a solucao numerica | # Vamos comparar com a solucao numerica | ||
- | points(x, numerica, col=' | + | points(x, numerica, col=' |
</ | </ | ||
- | A aproximação foi boa? Tente repetir o mesmo código com dt = 0.01 e compare. | + | A aproximação foi boa? Tente repetir o mesmo código com dt = 0.01 e 0.001 e compare. |
- | ===== Outra função simples | + | ====== Integração Numérica no R ====== |
- | + | Não precisamos fazer todo o procedimento anterior para fazer a integração numérica no {{: | |
- | Vamos pensar em outro caso, onde a taxa de variação instantânea é positiva e tende a zero quando | + | Vamos integrar numericamente algumas equações usando o pacote |
- | + | ||
- | $$ f(x)=f(x)* (1-f(x)) $$ | + | |
- | + | ||
- | < | + | |
- | ' | + | |
- | ode2(%, | + | |
- | </ | + | |
- | + | ||
- | Talvez não reconheça essa função, faça exponenciação de ambos os lados que ela parecerá | + | |
- | + | ||
- | ====== Integração Numérica no R ====== | + | |
- | Vamos integrar numericamente algumas equações usando o pacote deSolve e a funçõa ODE. | + | |
Antes de tudo precisa instalar e carregar o pacote. Para instalar você pode usar o menu do RGui ou pela linha de comando, digite: | Antes de tudo precisa instalar e carregar o pacote. Para instalar você pode usar o menu do RGui ou pela linha de comando, digite: | ||
Linha 145: | Linha 160: | ||
*1. Primeiro criamos a função, com os seguintes parâmetros na função R: | *1. Primeiro criamos a função, com os seguintes parâmetros na função R: | ||
* o tempo, que depois definiremos com uma sequência numérica | * o tempo, que depois definiremos com uma sequência numérica | ||
- | * a situação inicial da variável | + | * a situação inicial da variável |
* os parâmetros da equação diferencial | * os parâmetros da equação diferencial | ||
< | < | ||
Linha 167: | Linha 182: | ||
plot(res.fy1[, | plot(res.fy1[, | ||
</ | </ | ||
+ | |||
+ | Será que a função //ode// fez mágica? Ela apenas usa um método parecido com o de Euler, que vimos acima, para achar a solução numérica de uma ode. | ||
===== Uma outra função simples ===== | ===== Uma outra função simples ===== | ||
Agora nossa equação é: | Agora nossa equação é: | ||
Linha 201: | Linha 218: | ||
*1. $ \frac{dy}{dt} = y-y^2*f(t)$ | *1. $ \frac{dy}{dt} = y-y^2*f(t)$ | ||
- | * sendo: $f(t)= | + | * sendo: $f(t)= |
* M=15 | * M=15 | ||
*2. $\frac{dn}{dt} = r(t)*n $ | *2. $\frac{dn}{dt} = r(t)*n $ | ||
- | * sendo: $r(t)= | + | * sendo: $r(t)= 0.1 - 100 sin(2 \pi t)$ |
- | Uma solução: | ||
- | < | ||
- | ### primeiro caso | ||
- | fy3 <- function(time, | ||
- | { | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | } | ||
- | y0 = 10 | ||
- | prmt=c(M=1) | ||
- | st=seq(0.1, | ||
- | res.fy3= ode(y=y0, | ||
- | plot(res.fy3[, | ||
- | |||
- | ### segundo caso | ||
- | |||
- | fy4 <- function(time, | ||
- | { | ||
- | | ||
- | rt= 0.1-100*(sin(2*pi*time)) | ||
- | | ||
- | | ||
- | } | ||
- | y0 = c(.1) | ||
- | # | ||
- | st=seq(0.1, | ||
- | res.fy4= ode(y=y0, | ||
- | plot(res.fy4[, | ||
- | |||
- | </ |