Escolar Documentos
Profissional Documentos
Cultura Documentos
10/0006345
Trabalho 6
Solues Numricas de EDOs (Equaes Diferenciais
Ordinrias)
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.
A partir do ponto
consideremos
de
por:
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)
Onde:
, sendo:
e , pesos;
a tangente no ponto ;
a tangente em um ponto intermedirio;
, onde
e
especificam a posio do ponto
intermedirio;
(Mtodo do ponto
(Mtodo de
Onde:
Objetivos
Resolver os problemas de resoluo numrica de EDOs apresentados:
1 Dado o PVI:
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;
: 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
: 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
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
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
plot(t(:,1),t(:,3),'g+')
plot(t(:,1),t(:,4),'b+')
legend('Funo analtica','Funo por Taylor','Funo por Euler
aperfeioado');
hold off
Discusso
Questo 1:
Dentre os mtodos utilizados para se achar os valores da equao
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.
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.