You are on page 1of 13

Universidade de Braslia

Faculdade UnB Gama


Disciplina : Mtodos Numricos para Engenharias (Turma B)
Professor : Lucival Malcher
Aluno: Alexandre Almeida Barbosa

10/0006345

Trabalho 6
Solues Numricas de EDOs (Equaes Diferenciais
Ordinrias)

Braslia, 13 de Julho de 2011

ndice
Introduo .................................................................................................................................... 3
Mtodo de Euler ..................................................................................................................... 4
Expanso de Taylor ............................................................................................................... 5
Mtodos de Rugge Kuta ........................................................................................................ 5
Objetivos ...................................................................................................................................... 6
Fluxograma.................................................................................................................................. 7
Cdigo Fonte ............................................................................................................................... 8
Questo1 questao1.c ......................................................................................................... 8
Questo 2 - questao2.c ........................................................................................................ 9
Resultados ................................................................................................................................. 10
Questo 1: ............................................................................................................................. 10
Questo 2: ............................................................................................................................. 11
Discusso .................................................................................................................................. 12
Questo 1: ............................................................................................................................. 12
Questo 2: ............................................................................................................................. 12
Concluso .................................................................................................................................. 12
Bibliografia ................................................................................................................................. 13

Introduo
Diversos fenmenos fsicos podem ser descritos atravs de EDOs (Equaes
Diferenciais Ordinrias). Essas equaes tm por caracterstica, a presena de
derivadas de uma funo desconhecida, todas relativas a uma nica varivel
independente.
A forma geral de uma EDO com derivadas at a ordem n:

(1)
A soluo desta equao consiste em uma famlia de funes
, que a
satisfaam em [a,b], com n derivadas nesse intervalo. O exemplo abaixo
mostra uma EDO que tm como resoluo infinitas equaes que diferem por
uma constante C:

(2)
Para especificar uma dessas funes, preciso impor condies iniciais
funo . A ordem de uma EDO caracterizada pela mais alta ordem de
derivao que possuir. De modo geral, so necessrias tantas condies
iniciais quanto a sua ordem. Dada uma Equao Diferencial, com ordem
maior que 1, se forem conhecidas, a funo e suas derivadas, at a ordem
anterior ordem da EDO, tem-se um Problema de Valor Inicial (PVI). Esse tipo
de problema permite a busca de uma aproximao numrica da funo para
um conjunto discreto de pontos. A soluo analtica de uma EDO uma funo
bem definida que pode ser avaliada para qualquer valor da varivel
independente. Entretanto, na maioria das vezes esse tipo de soluo muito
difcil de obter-se, recorrendo-se ento aproximao numrica da soluo da
EDO em questo. Dentre os diversos mtodos de aproximao numrica de
uma EDO, pode-se citar: Mtodo de Euler, Expanso de Taylor e Mtodos de
Rugge Kuta.

Mtodo de Euler
Suponhamos uma funo y = F(x), com uma soluo analtica mostrada na
figura 1.

Figura 1 - Curva de Soluo Analtica para y = F(X)

A partir do ponto
consideremos
de

por:

, para fazer uma estimativa acerca de

, aproximando-se essa derivada em torno


, como exibido na figura 2.

Considerando que a distncia


se aproxime cada vez mais de zero,
, no ponto
, tende a . Conclumos:

Podemos generalizar essa expresso, para encontrar qualquer


ponto anterior na dita, expresso de Euler:

a partir do

(3)

Expanso de Taylor
Se, de algum modo, estiverem disponveis as aproximaes de
,
para
em
, respectivamente, a srie de Taylor de k-sima ordem
de
em torno de
, representada por:
(4)
Considerando

, podemos aproximar

pela frmula:
(5)

Sendo k, a ordem de Taylor utilizada. Pode-se perceber que o mtodo de


Euler, equivale Srie de Taylor de 1 ordem.

Mtodos de Rugge Kuta


Define-se como mtodo de Rugge Kuta, todo aquele que possuir as seguintes
propriedades:

So de passo um (para calcular


usamos apenas
);
No exigem o clculo de qualquer derivada de
calculando, em
vez disso,
em vrios pontos;
Aps expandir
por Taylor para funo de duas variveis em torno
de
e agrupar os termos semelhantes, sua expresso coincide
com a do mtodo de srie de Taylor de mesma ordem;

O mtodo de Euler, caracterizado como um mtodo de Rugge Kuta de ordem


.
O mtodo de Rugge Kuta de 2 ordem se baseia em mudanas no mtodo de
Euler, para obter um mtodo baseado nas sries de Taylor de 2 ordem sem
que, para isso, sejam necessrios os clculos das derivadas de 2 ordem.
Pode-se aperfeioar o mtodo de Euler, a partir a informao sobre a derivada
em pontos intermedirios do intervalo utilizado, ou seja, levando em
considerao a curvatura de x. Generalizando o mtodo, temos:

Onde:

, sendo:
e , pesos;
a tangente no ponto ;
a tangente em um ponto intermedirio;
, onde
e
especificam a posio do ponto
intermedirio;

Esses parmetros esto relacionados, no sendo possvel escolh-los


livremente. Uma escolha possvel seria

(Mtodo do ponto

central). Outra escolha tambm utilizada seria

(Mtodo de

Euler aperfeioado). Os dois mtodos so conhecidos como mtodos de


Rugge Kuta de 2 ordem, por envolverem o termos de ordem 2 da srie de
Taylor.
Para o Mtodo de Euler Aperfeioado, podemos simplificar a frmula como:

Onde:

Objetivos
Resolver os problemas de resoluo numrica de EDOs apresentados:
1 Dado o PVI:

Determinar y(1), y(2),y(3) de acordo com os seguintes mtodos


a) Mtodo de Euler;
b) Expanso de Taylor de 3 ordem;
c) Rugge Kuta de 2 ordem (Euler aperfeioado)
2 Dado o PVI:

Determinar y(2), y(3), ..., y(10)


a) Expanso de Taylor de 3 ordem;
b) Rugge Kuta de 2 ordem (Euler aperfeioado)
c) Considerando a soluo exata
, construir um grfico
de y(x) juntamente com os resultados encontrados em a) e b);

Fluxograma
Para o mtodo de Euler, utilzou-se:

: valor inicial de x;

: valor final de x;

: passo;

: valor inicial de y;
o programa desenvolvido atendeu s seguintes etapas:
x = a;
y = yinicial;

x<=b?

Sim
y = y + hf (x, y);
x = x + h;
imprime(x,y);

No

Fim do programa;

Para o mtodo de Taylor de 3 ordem, foram encontradas as derivadas de 2 e 3


ordem e usou-se:

: valor inicial de x;

: valor final de x;

: passo;

: valor inicial de y;
EDO: Equao Diferencial Ordinria fornecida;
Etapas:
x=a;
y=yinicial;
y'=EDO;
y''=(EDO)';
y'''=(EDO)'';

x<=b?
Sim

x = x + h;
y(i+1)=y(i)+ y(i)'*h +
y(i)''*h*h/2+y(i)'''*h*h*h/6;
imprime(x,y);
Fim do programa;

No

Para o mtodo de Rugge Kuta de 1 ordem, usou-se:

: valor inicial de x;

: valor final de x;

: passo;

: valor inicial de y;
f(x,y): Equao Diferencial Ordinria fornecida;
Etapas:
x = a;
y = yinicial;

x<=b?

Sim
x(i+1) = x(i) + h;
k1 = h*f(x(i)+h)
k2 = h*f(x(i+1),y(i)+k1)

No

y (i+1)= y(i) + (k1 + k2)/2


imprime(x(i+1),y(i+1));

Fim do programa;

Cdigo Fonte
Para cada questo foi desenvolvido um cdigo fonte em linguagem c, agrupando os
mtodos necessrios para cada uma, exibindo-os no final em uma tabela comparativa
com a resposta analtica (que exata).

Questo1 questao1.c
#include <stdio.h>
#include <math.h>
double primitiva(double x);
double funcao(double x);
double der1(double x);
double der2(double x);
double der3(double x);
int main(void){
int i;
double j;
double h=1;
int P = 4;
double x[P],yl[P],yll[P],ylll[P],F[P];
double yeuler[P],ytaylor[P],yrk[P];
double k1,k2;
double a,b,alfa,beta;
a = b = 0.5;
alfa = beta = 1;
x[0]= 0;
yeuler[0]=ytaylor[0]=yrk[0]=-1;
yl[0]=der1(0);
yll[0]=der2(0);
ylll[0]=der3(0);
F[0]=primitiva(x[0]);
for(i=1;i<P;i++){

x[i]=x[0]+h*i;
//Metodo de Euler:
yeuler[i]=yeuler[i-1]+h*funcao(x[i-1]);
//Metodo de Taylor de 3 ordem:
ytaylor[i]= ytaylor[i-1] + yl[i-1]*h + yll[i-1]*pow(h,2)/2 +
ylll[i-1]*pow(h,3)/6;
yl[i]=der1(i);
yll[i]=der2(i);
ylll[i]=der3(i);
//Metodo de Rugge Kuta de 2 ordem:
k1 = funcao(x[i-1]);
k2 = funcao(x[i-1]+alfa*h);
yrk[i]=yrk[i-1]+(a*k1 + b*k2)/h;
F[i]=primitiva(x[i]);
}
//Imprimindo na tela:
printf("#Valores encontrados:\n");
printf("#X\tAnalitico\tEuler\tTaylor\tRK\n\n");
for(i=0;i<P;i++){
printf("%.2lf\t%.2lf\t\t%.2lf\t%.2lf\t%.2lf\n",x[i],F[i],yeuler[i],ytay
lor[i],yrk[i]);
}
//Imprimindo no arquivo:
FILE *arq;
if(arq = fopen("saida_questao1.txt","wt+")){
for(i=0;i<P;i++){
fprintf(arq,"%.2lf\t%.2lf\t\t%.2lf\t%.2lf\t%.2lf\n",x[i],F[i],yeuler[i]
,ytaylor[i],yrk[i]);
}
printf("\nEssa tabela foi salva no arquivo
\"saida_questao1.txt\".\n");
}
return 0;
}
double funcao(double x){
return (cos(x)+1);
}
double primitiva(double x){
return (sin(x) + x -1);
}
double der1(double x){
return(cos(x)+1);
}
double der2(double x){
return(-sin(x));
}
double der3(double x){
return(-cos(x));
}

Questo 2 - questao2.c
#include <stdio.h>
#include <math.h>
double primitiva(double x);
double der1(double x, double y);
double der2(double x, double y);
double der3(double x, double y);
int main(void){
int i;
double j;
double h=1;
int P = 11;
double yt[P],yrk[P],x[P],yl[P],yll[P],ylll[P],F[P];
double k1,k2;
double a,b,alfa,beta;
a = b = 0.5;
alfa = beta = 1;
double xinicial = 1;
x[0]= xinicial;

yt[0]=yrk[0] = 0.5;
yl[0]=der1(xinicial,primitiva(xinicial));
yll[0]=der2(xinicial,primitiva(xinicial));
ylll[0]=der3(xinicial,primitiva(xinicial));
F[0]=primitiva(xinicial);
for(i=1;i<P;i++){
//Definindo o prximo valor de x
x[i]=x[0]+h*i;
//Mtodo de Taylor
yt[i]= yt[i-1] + yl[i-1]*h + (yll[i-1]*pow(h,2)/2) + ((ylll[i1]*pow(h,3))/5);
yl[i]=der1(x[i],yt[i]);
yll[i]=der2(x[i],yt[i]);
ylll[i]=der3(x[i],yt[i]);
//Mtodo de Rugge Kuta
k1 = h*der1(x[i-1],yrk[i-1]);
k2 = h*der1(x[i-1]+(h/2),yrk[i-1]+k1);
yrk[i]=yrk[i-1] + (k1 + k2)/2;
//Funo analtica:
F[i] = primitiva(x[i]);
}
//Imprimindo na tela:
printf("Valores encontrados:\n");
printf("x\tAnalitica\tTaylor\t\tRugge Kuta\n");
for(i=0;i<(P-1);i++){
printf("%.2lf
\t%.2lf\t\t%.2lf\t\t%.2lf\n",x[i],F[i],yt[i],yrk[i]);
}
FILE *arq;
if(arq = fopen("saida_questao2.txt","wt+")){
for(i=0;i<P;i++){
fprintf(arq,"%.2lf
\t%.2lf\t\t%.2lf\t\t%.2lf\n",x[i],F[i],yt[i],yrk[i]);
}
}
return 0;
}
double primitiva(double x){
return (2*pow(x,2) - x - 0.5);
}
double der1(double x, double y){
return ((2*y + x + 1)/x);
}
double der2(double x, double y){
return ((2*y + 2*x + 1)/pow(x,2));
}
double der3(double x, double y){
return 0;
}

Resultados
Questo 1:
Tabela de sada:
X
Analtico
Euler
0.00
-1.00
-1.00
1.00
0.84
1.00
2.00
1.91
2.54
3.00
2.14
3.12
Cdigo para plotagem plotarquestaoum.m;
clear all
clc
t = load('saida_questao1.txt');
x=linspace(0,3,50);
y = sin(x) + x - 1;
hold on
% grid on

Taylor
-1.00
0.83
1.86
2.06

Rugge Kuta
-1.00
0.77
1.83
2.13

title('Curvas de anlise de aproximao de y=sen(x)+ x -1');


xlabel('x');
ylabel('y(x)');
plot(x,y,'k')
plot(t(:,1),t(:,3),'g+')
plot(t(:,1),t(:,4),'b+')
plot(t(:,1),t(:,5),'r+')
legend('Funo analtica','Funo por Euler','Funo por Taylor','Funo
por Euler aperfeioado');
hold off

Grfico em Matlab pelo cdigo plotarquestaoum.m:

Grfico 1 - Plotagem do programa 'questao.c'

Questo 2:
Tabela de sada:
X
1.00
2.00
3.00
4.00
5.00
6.00
7.00
8.00
9.00
10.00

Analtico
0.50
5.50
14.50
27.50
44.50
65.50
90.50
119.50
152.50
189.50

Taylor
0.50
5.50
14.50
27.50
44.50
65.50
90.50
119.50
152.50
189.50

Rugge Kuta
0.50
5.17
13.93
26.90
44.11
65.57
91.29
121.27
155.52
194.03

Cdigo para plotagem plotarquestaodois.m:


clear all
clc
t = load('saida_questao2.txt');
x=linspace(1,10,50);
y = 2*x.^2 - x -0.5;
hold on
% grid on
title('Curvas de anlise de aproximao de y=x^2 -x -0.5');
xlabel('x');
ylabel('y(x)');
plot(x,y,'k')

plot(t(:,1),t(:,3),'g+')
plot(t(:,1),t(:,4),'b+')
legend('Funo analtica','Funo por Taylor','Funo por Euler
aperfeioado');
hold off

Grfico em Matlab pelo cdigo plotarquestaodois.m:

Grfico 2 - Plotagem do programa 'questao2.c'

Discusso
Questo 1:
Dentre os mtodos utilizados para se achar os valores da equao

(considerando que ela fosse desconhecida), o mais satisfatrio foi o


mtodo de Rugge Kuta, seguido pelo de Taylor e, por ltimo, pelo mtodo de
Euler.

Questo 2:
Dentre os mtodos utilizados para se achar os valores da equao
, o mtodo de Taylor, se mostrou totalmente eficiente. Isto decorre
do fato de que a derivada a funo de ordem 2, fazendo com que no haja
erro carregado na Expanso de Taylor. O mtodo de Rugge Kuta, aproximouse eficientemente do resultado desejado.

Concluso
O mtodo de Euler caracterizado pela simplicidade, mesmo que no seja to
eficiente quanto os mtodos aqui utilizados. J a expanso de Taylor permite
que a preciso seja menor, quanto maior a ordem utilizada. Porm, algumas
funes so relativamente complexas para serem derivadas diversas vezes,
sendo esta uma desvantagem desse mtodo.

O mtodo de Rugge Kuta se mostrou, numa anlise custo benefcio, pois


consegue uma preciso to boa quanto uma expanso de Taylor de 2 ordem,
mas com uma simplicidade quase to grande quanto o mtodo de Euler, no
necessitando, tambm, de nenhuma derivao, como ocorre no mtodo de
Taylor.
Como esses mtodos se utilizam de passos em que o passo seguinte depende
do passo antecessor, o erro acaba se propagando medida que os passos so
executados.

Bibliografia
Fontes: Calculo Numerico, Neide Bertoldi, 1 edio 2007.
Calculo Numrico: Caractersticas Matemticas e Computacionais dos Mtodos
Numricos, Dcio Sperandio, Joo Mendes e Luiz Monken, 1 edio 2003.

You might also like