Metodo de Euler
Metodo de Euler
Metodo de Euler
MARCO TEORICO
INTRODUCCION
En este mtodo se buscara la solucin de ecuaciones diferenciales ordinarias de
la forma:
o, en trminos matemticos,
Todos los mtodos de un paso que se expresen de esta forma general, tan solo
van a diferir en la manera en la que se estima la pendiente. El procedimiento ms
simple consiste en usar la ecuacin diferencial, para estimar la pendiente, en la
forma de la primera derivada en xi . En otras palabras se toma la pendiente al
inicio del intervalo como una aproximacin de la pendiente promedio sobre todo el
intervalo. Tal procedimiento, llamado mtodo de Euler.
METODO DE EULER
Esta ultima conclusin tiene un sentido intuitivo, puesto que el mtodo de Euler
usa segmentos de lnea recta para aproximar la solucin. De ah que al mtodo de
Euler se le conozca como un mtodo de primer orden.
Tambin deber. observarse que este patrn general rige a los mtodos de orden
superior de un paso, que se describen en las siguientes pginas. Es decir, un
mtodo de n esimo. orden dar resultados perfectos si la solucin de la EDO es
un polinomio de n esimo grado. Adems, el error de truncamiento local ser. O
(hn+1 ); y el error global, O (hn ).
EJEMPLO RESUELTO
Y verdaderas:
4 3 2
y 0= y ( x 0 )=0.5( 0) +4 (0) 10 ( 0 ) +8.5(0)+1=1
y 1= y ( x 1) =0.5(0.5)4 + 4(0.5)3 10 ( 0.5 )2+ 8.5(0)+1=3.21875
y 2= y ( x 2 )=0.5(1)4 + 4(1)310 ( 1 )2+ 8.5(1)+1=3
4 3 2
y 3= y ( x 3 )=0.5(1.5) + 4(1.5) 10 ( 1.5 ) +8.5 (1.5)+1=2.21875
y 4 = y ( x 4 )=0.5(2)4 + 4( 2)310 ( 2 )2 +8.5(2)+1=2
y 5= y ( x 5 )=0.5(2.5)4 + 4 (2.5)3 10 (2.5 )2+ 8.5(2.5)+ 1=2.71875
y 6= y ( x 6 )=0.5( 3) 4 +4 (3)310 ( 3 )2 +8.5(3)+1=4
y 7= y ( x 7 )=0.5(3.5)4 + 4 (3.5)3 10 ( 3.5 )2+ 8.5(3.5)+ 1=4.71875
4 3 2
y 8= y ( x 8 )=0.5( 4) + 4 (4) 10 ( 4 ) +8.5(4)+1=3
Y Euler:
y 0= y ( x 0 )= y ( 0 ) =1
i=0
y 1= y o + f ( x0 , y 0 ) h
3 2
f ( x 0 , y 0 )=f ( 0,1 )=2 ( 0 ) +12 ( 0 ) 20 ( 0 )+ 8.5=8.5
y 1=1+ ( 8.5 ) ( 0.5 )
y 1=5.25
i=1
y 2= y 1 +f ( x 1 , y 1 ) h
f ( x 1 , y 1 ) =f ( 0.5,5 .25 )=2 ( 0.5 )3 +12 ( 0.5 )220 ( 0.5 ) +8.5=1.25
y 2=5.25+ ( 1.25 ) ( 0.5 )
y 2=5.875
i=2
y 3= y 2 + f ( x 2 , y 2) h
f ( x 2 , y 2 ) =f ( 1,5.875 )=2 ( 1 )3+ 12 ( 1 )220 ( 1 ) +8.5=1.5
y 1=5.875+ (1.5 ) ( 0.5 )
y 3=5.125
i=3
y 4 = y 3+ f ( x 3 , y 3 ) h
f ( x 3 , y 3 ) =f ( 1.5,5 .125 )=2 ( 1.5 )3+ 12 ( 1.5 )220 ( 1.5 )+ 8.5=1.25
y 4 =5.125+ (1.25 )( 0.5 )
y 4 =4.5
i=4
y 5= y 4 + f ( x 4 , y 4 ) h
f ( x 4 , y 4 ) =f ( 2,4.5 ) =2 ( 2 )3 +12 (2 )2 20 ( 2 )+ 8.5=0.5
y 5=4.5+ ( 0.5 ) ( 0.5 )
y 5=4.75
i=5
y 6= y 5 + f ( x5 , y 5 ) h
f ( x 5 , y 5 ) =f ( 2.5,4 .75 )=2 ( 2.5 )3 +12 ( 2.5 )220 ( 2.5 ) +8.5=2.25
y 6=4.75+ ( 2.25 ) ( 0.5 )
y 6=5.875
i=6
y 7= y 6 + f ( x 6 , y 6 ) h
3 2
f ( x 6 , y 6 )=f (3,5.875 )=2 ( 3 ) +12 ( 3 ) 20 ( 3 ) +8.5=2.5
y 6=5.875+ ( 2.5 )( 0.5 )
y 7=7.125
i=7
y 8= y 7 + f ( x7 , y 7 ) h
f ( x 7 , y7 )=f ( 3.5,7 .125 ) =2 ( 3.5 )3 +12 ( 3.5 )220 ( 3.5 ) +8.5=0.25
y 6=7.125+ (0.25 ) ( 0.5 )
y 8=7
Porcentaje de error:
11
( 100 ) =0
1
3.218755.25
( 100 )=63.106796
3.21875
35.875
( 100 )=95.833336
3
2.2187535.125
( 100 )=130.985916
2.21875
24.5
( 100 )=125
2
2.718754.75
( 100 )=74.712646
2.71875
45.875
( 100 )=46.875
4
4.718757.125
( 100 )=50.993378
4.71875
37
(100 )=133.333328
3
X Yv Ye Ea
0 1 1 0
0.5 3.21875 5.25 63.106796
1 3 5.875 95.833336
1.5 2.21875 5.125 130.985916
2 2 4.5 125
2.5 2.71875 4.75 74.712646
3 4 5.875 46.875
3.5 4.71875 7.125 50.993378
4 3 7 133.333328
Y grficamente obtenemos:
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
siendo:
serie 1= Y verdadera.
serie2= Y calculada por Euler.
PSEUDOCODIGO
Inicio
Dobles Y[50000],X[[50000],Ye[50000],F[50000],Et[50000].
Doble X,h,n.
Entero i;
Pedir X[0] y Y[0].
Pedir X ultima y h.
Asignar X[0],Y[0],X,h;
Obtenemos el numero de iteraciones
N=(X-X[0])/h;
Para i=0; i menor o igual a n; aumentar i en 1;
{
X[i+1]=X[i]+h;
f[i]=2*-(pow(X[i],3))+(12*(pow(X[i],2)))-(20*X[i])+8.5;
Ye[i+1]=Ye[i]+(f[i]*h);
Y[i]=-(0.5*pow(X[i],4))+(4*pow(X[i],3))-(10*pow(X[i],2))+(8.5*X[i])+1
Et[i]=fabs((Y[i]-Ye[i])/Y[i])*100;
Imprimir X[i],Y[i],Ye[i] y Et[i];
}
Fin
euler::euler() void euler::tabla()
int i;
Diagramas UML
euler
euler();
void calculos();
void tabla();
*float a,b;
*double
Ye[40001];
*double
Y[40001];
*double
X[40001];
*double P;
*double x;
*double h;
*double n;
void
euler::calculos()
int i;
double
Et[40001];
double
f[40001];
CODIGO
/*METODO DE EULER*/
/*MARIO ALBERTO SEYDLITZ RIVERA
PRACTICA 11
3EM1*/
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
using namespace std;
FILE*fid;
class euler
{
public:
euler();
void calculos();
void tabla();
private: /*asignamos un vector a Yverdadera Yde euler y X*/
double Ye[40001];
double Y[40001];
double X[40001];
double P;
double x;
double h;
double n;
};
euler::euler()/*en el constructor pedimos los valores de la x0,y0,la altura y hasta donde queremos
que llegue x*/
{
cout<<"\ndame tus condiciones iniciales:\t";
cout<<"\n dame X0=\t";
cin>>X[0];
cout<<"\n dame el valor de h:\t";
cin>>h;
cout<<"\n dame el valor de y en Y0=\t";
cin>>P;
cout<<"\n hasta que valor de X quieres llegar?\t";
cin>>x;
}
void euler::tabla()
{
int i;
fid=fopen("Tabla2.xls","w");/*creamos nuestra hoja de calculo*/
for (i=0;i<=n;i++)
{
fprintf(fid,"%f\t %f\t %f\n",X[i],Y[i],Ye[i]); /*imprimimos datos en nuestra hoja de calculo*/
}
fclose(fid); *cerramos el archivo*/
}
void euler::calculos()
{
int i;
double Et[40001];
double f[40001];
n=(x-X[0])/h; /*obtenemos el numero de veces que se debe iterar para llegar a la x final*/
for(i=0;i<=n;i++)
{
X[i+1]=X[i]+h; /*se asignan valores a x*/
f[i]=2*-(pow(X[i],3))+(12*(pow(X[i],2)))-(20*X[i])+8.5;
Ye[0]=P;
Ye[i+1]=Ye[i]+(f[i]*h); /*aplicando el metodo de euler*/
Y[i]=-(0.5*pow(X[i],4))+(4*pow(X[i],3))-(10*pow(X[i],2))+(8.5*X[i])+1; *obtenemos el valor de la
Y verdadera*/
Et[i]=fabs((Y[i]-Ye[i])/Y[i])*100; *se calcula el error relativo porcentual*/
cout<<"\n X\t\t"<<"Yverdadera\t"<<"Yeuler\t\t et \n";
cout<<X[i]<<"\t"<<Y[i]<<"\t"<<Ye[i]<<"\t"<<Et[i]<<endl; /*se imprimen resultados*/
}
}
int main()
{
cout<<"\n metodo de euler:";
cout<<"\n la ecuacion diferencial es:\t";
cout<<"n dy/dx=-2x3+12x2-20x+8.5\n";
cout<<setprecision(6)<<fixed;
euler E;
E.calculos();
E.tabla();
return 0;
}
RESULTADOS
Al abrir nuestra hoja de calculo se quedan guardados todos los datos de lo que
son nuestros valores en X, Y verdadera y Y Euler.
Utilizando Excel graficamos los valores obtenidos para crear dos curvas una la
cual es nuestra curva obtenida se representa mediante la unin de rectas en cada
punto y la otra es la solucin verdadera la cual simplemente se grafica con una
curva.
CONCLUSIONES