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 11:45] – [Método de Euler] adalardo | exercicios:calc1 [2024/01/09 18:18] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 67: | Linha 67: | ||
Essas primeiras equações diferencial foram fáceis de resolver no Maxima {{: | Essas primeiras equações diferencial foram fáceis de resolver no Maxima {{: | ||
- | 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 104: | Linha 104: | ||
< | < | ||
- | # 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 127: | 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. |
- | ====== Integração Numérica no R ====== | + | ====== Integração Numérica no R ====== |
- | Vamos integrar numericamente algumas equações usando o pacote deSolve e a função //ode//. | + | Não precisamos fazer todo o procedimento anterior para fazer a integração numérica no {{: |
+ | Vamos integrar numericamente algumas equações usando o pacote | ||
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 216: | 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[, | ||
- | |||
- | </ |