Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
exercicios:calc1 [2012/05/11 11:35] – [Soluções Numéricas] adalardoexercicios: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 {{:exercicios:maximalogo.png?30|Maxima}}. Mas não se acostume, nem sempre é assim. Muitas equações não tem soluções algébricas((outras tem mais de uma solução)) e precisam ser resolvidas com métodos chamados de "força bruta". São geralmente computacionalmente intensos, mas com um computador pessoal podemos fazer maravilhas... Essas primeiras equações diferencial foram fáceis de resolver no Maxima {{:exercicios:maximalogo.png?30|Maxima}}. Mas não se acostume, nem sempre é assim. Muitas equações não tem soluções algébricas((outras tem mais de uma solução)) e precisam ser resolvidas com métodos chamados de "força bruta". São geralmente computacionalmente intensos, mas com um computador pessoal podemos fazer maravilhas...
-O processo básico é bem simples, muito parecido com o que fizemos para resolver as derivadas, mas tem muitas técnicas envolvidas.+O processo básico é bem simples, muito parecido com o que fizemos para resolver as derivadas, mas existem muitas outras técnicas mais robustas.
  
 ===== 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, lembrando que $\Delta t -> 0 $    
-Podemos repetir isso para os próximos intervalos de tempo, vendo a representação geométrica do que estamos fazendo no {{:exercicios:rlogo.png?30|}}. +Podemos repetir isso para os próximos intervalos de tempo no {{:exercicios:rlogo.png?30|}}. 
  
 <code> <code>
-# 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,tempo)*dt                 N <- N + f(N,tempo)*dt
                 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), typ='l', col='green');+plot(x, 20*exp(2*x), typ='l', col='green')
 # Vamos comparar com a solucao numerica # Vamos comparar com a solucao numerica
-points(x, numerica, col='red', pch=4, ce=0.2);+points(x, numerica, col='red', pch=4, ce=0.2)
 </code> </code>
  
-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 {{:exercicios:rlogo.jpg?20  |}}, existem soluções implementadas previamente que são muito mais eficientes e robusta que a nossa. 
-Vamos integrar numericamente algumas equações usando o pacote deSolve e a função //ode//.+Vamos integrar numericamente algumas equações usando o pacote //deSolve// e a função //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 217: Linha 218:
  
   *1. $ \frac{dy}{dt} = y-y^2*f(t)$   *1. $ \frac{dy}{dt} = y-y^2*f(t)$
-    * sendo: $f(t)= + 0.sin(2\pi Mt)$;+    * sendo: $f(t)= 0.01 + 0.01 sin(2\pi Mt)$;
     * M=15     * M=15
   *2. $\frac{dn}{dt} = r(t)*n $    *2. $\frac{dn}{dt} = r(t)*n $ 
-    * sendo: $r(t)= 0 + 0.1 sin(2 \pi t)$+    * sendo: $r(t)= 0.1 - 100 sin(2 \pi t)$
  
-Uma solução:  
  
-<code> 
-### primeiro caso 
-fy3 <- function(time,y, parms) 
-  { 
-   n=y[1] 
-   M=parms[1] 
-   r=0.01+ 0.01*sin(2*pi* M *time) 
-   dy.dt=n-n^2 * r 
-   return(list(c(dy.dt)))  
-  }  
-y0 = 10 
-prmt=c(M=1) 
-st=seq(0.1,20,by=0.01) 
-res.fy3= ode(y=y0,times=st, func=fy3,parms=prmt) 
-plot(res.fy3[,1], res.fy3[,2], type="l", col="red",lwd=2, xlab="tempo", ylab="y") 
- 
-### segundo caso 
- 
-fy4 <- function(time,y, parms) 
-  { 
-   n=y[1] 
-   rt= 0.1-100*(sin(2*pi*time)) 
-   dy.dt=rt*n 
-   return(list(c(dy.dt)))  
-  }  
-y0 = c(.1) 
-#prmt=c(M=1) 
-st=seq(0.1,20,by=0.0001) 
-res.fy4= ode(y=y0,times=st, func=fy4) 
-plot(res.fy4[,1], res.fy4[,2], type="l", col="red",lwd=2, xlab="tempo", ylab="y") 
- 
-</code> 
exercicios/calc1.1336736141.txt.gz · Última modificação: 2024/01/09 18:17 (edição externa)
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0