Método de euler para solución de EDs

Este programa permite calcular la solución numérica de una ecuación diferencial ordinaria utilizando el concepto de integración numérica. Si se conocen una condición inicial de una función desconocida y(x) y la expresión analítica para y'(x), entonces la solución numérica f(x) es

f(x+dx) = y(x) + y'(x) *dx

donde dx es el valor del incremento diferencial de x. Así, mientras más pequeño sea dx, más aproximado será el valor de f(x) al valor de y(x).

Aquí se utilizó la ecuación diferencial

y'(x) = – 2x^3 + 12x^2 – 20x + 8.5,    cuya solución ya conocida es

y(x) = – 0.5 x^4 + 4x^3 – 10x^2 + 8.5x + 1 .

Debajo del código podrán encontrarse dos resultados obtenidos con diferentes valores de dx.

================================ Código =================================

#include <stdio.h>
#include <cmath>

using namespace std;

int main(){
float fx;
float y;
float y0 = 1;
float dx = 0.001;

printf (”     x        y real     y calculada    error(%c)\n\n”, 37);
for (float x = 0; x <= 4; x += dx){

y = -0.5*pow(x , 4) + 4*pow(x , 3) – 10*pow(x , 2) + 8.5*x + 1;

if (x == 0)
fx = y0;
else
fx += (-2*pow(x – dx , 3) + 12*pow(x – dx , 2) -20*(x – dx) + 8.5)*dx;
printf (” %f    %f     %f     %f\n”, x, y, fx, 100*abs((y – fx)/y));
}
}

================================== Resultados ===============================

Para dx = 0.5, se tiene:

eulery, gráficamente:

euler1

donde se ve que las soluciones divergen.

Para dx = 0.001, los últimos resultados son:

euler3donde el error (la cuarta columna) se halla drásticamente reducido respecto del caso anterior.

Gráficamente, para dx = 0.25 (utilizo aquí un valor mayor a 0.001 para claridad de imagen):

euler2

Donde se ve que las soluciones son aproximadamente iguales.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s