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:35] – [Soluções Numéricas] 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 99: | Linha 99: | ||
| E assim por diante .... | 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, vendo a representação geométrica do que estamos fazendo  | + | 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 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 ======  | + | 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 deSolve e a função //ode//. | + | 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 217: | 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[, | ||
| - | |||
| - | </ | ||