You are on page 1of 10

PROGRAMA PARA RESOLVER ECUACIONES DIFERENCIALES DE SEGUNDO GRADO

TREJO OLVERA GABRIELA ISABEL

PROYECTO FINAL

Para poder realizar este trabajo se necesita tener previo conocimiento del mtodo de Runge-Kutta ya que nos muestra una forma para poder resolver las ecuaciones de segundo grado.
En anlisis numrico, los mtodos de Runge-Kutta son un conjunto de mtodos genricos iterativos, explcitos e implcitos, de resolucin numrica de ecuaciones diferenciales. Este conjunto de mtodos fue inicialmente desarrollado alrededor del ao 1900 por los matemticos C. Runge y M. W. Kutta. Los mtodos de Runge-Kutta (RK) son unos conjuntos de mtodos iterativos (implcitos y explcitos) para la aproximacin de soluciones de ecuaciones diferenciales ordinarias, concretamente, del problema de valor inicial. Sea

una ecuacin diferencial ordinaria, con donde conjunto abierto, junto con la condicin de que el valor inicial de sea

es un

Entonces el mtodo RK (de orden s) tiene la siguiente expresin, en su forma ms general:

, donde h es el paso por iteracin, o lo que es lo mismo, el incremento entre los sucesivos puntos y . Los coeficientes son trminos de aproximacin intermedios, evaluados en de manera local

con coeficientes propios del esquema numrico elegido, dependiente de la regla de cuadratura utilizada. Los esquemas Runge-Kutta pueden ser explcitos o implcitos dependiendo de las constantes del esquema. Si esta matriz es triangular inferior con todos los elementos de la diagonal principal iguales a cero; es decir, para , los esquemas son explcitos.

MTODO DE CUARTO ORDEN

Un miembro de la familia de los mtodos Runge-Kutta es usado tan comnmente que a menudo es referenciado como RK4 o como el mtodo Runge-Kutta.

Definiendo un problema de valor inicial como:

Entonces el mtodo RK4 para este problema est dado por la siguiente ecuacin:

Donde

As, el siguiente valor (yn+1) es determinado por el presente valor (yn) ms el producto del tamao del intervalo (h) por una pendiente estimada. La pendiente es un promedio ponderado de pendientes, donde es la pendiente al principio del intervalo, es la pendiente en el punto medio del intervalo, usando para determinar el valor de y en el punto usando el mtodo de Euler. es otra vez la pendiente del punto medio, pero ahora usando para determinar el valor de y; es la pendiente al final del intervalo, con el valor de y determinado por . Promediando las cuatro pendientes, se le asigna mayor peso a las pendientes en el punto medio:

Esta forma del mtodo de Runge-Kutta, es un mtodo de cuarto orden lo cual significa que el error por paso es del orden de , mientras que el error total acumulado tiene el orden , razn por la cual

. Por lo tanto, la convergencia del mtodo es del orden de es usado en los mtodos computaciones. Ya sabiendo un poco de este mtodo y analizarlo se produjo lo siguiente:

PROCEDIMIENTO En el cdigo se hizo lo siguiente: Se declaran las variables:

public static List<double> puntosx = new List<double>(); public static List<double> puntosy = new List<double>(); public static string funcion = "";

Se guardan las constantes que pone el usuario en las variables y se desarrolla el mtodo Runge-Kutta:

private void solucion_Click(object sender, EventArgs e) { double xo, yo, xfinal, H,ypri; funcion = "((" + gdex.Text + ")/(" +ybiprima.Text+ "))-" + "((" + yprima.Text + ")/("+ybiprima.Text + "))*u-" + "((" + y.Text + ")/("+ybiprima.Text+"))*y"; xo = Convert.ToDouble(x1.Text); puntosx.Add(xo); yo = Convert.ToDouble(y1.Text); puntosy.Add(yo); xfinal = Convert.ToDouble(x2.Text); ypri = Convert.ToDouble(y2.Text); H= Convert.ToDouble(texth.Text); double xr=xo,yr=yo,u=ypri,k1,k2,k3,k4,k,kprima; while(xr<xfinal){ k1 = Ciloci.Flee.Program_EDO.f(funcion, xr, yr, u); k2 = Ciloci.Flee.Program_EDO.f(funcion, xr + (H / 2), yr + H / 2 * u + (H * H / 8) * k1, u + (H / 2) * k1); k3 = Ciloci.Flee.Program_EDO.f(funcion, xr + H / 2, yr + (H / 2) * u + (H * H / 8) * k1, u + (H / 2) * k2); k4 = Ciloci.Flee.Program_EDO.f(funcion, xr + H, yr + H * u + (H * H / 2) * k3, u + 2 * (H / 2) * k3); k = (H / 6) * (k1 + k2 + k3); kprima = (H / 6) * (k1 + 2 * k2 + 2 * k3 + k4); yr = yr + H * u + H * k; u = u + kprima; xr = xr + H; puntosx.Add(xr); puntosy.Add(yr); }

El for se guarda los resultados en las tablas y se los muestra al usuario:

for (int i=0; i < puntosx.Count;i++ ) { listay.Items.Add(puntosy[i]);

listax.Items.Add(puntosx[i]);

Funcin para LIMPIAR

private void limpiar_Click(object sender, EventArgs e) { ybiprima.Text = ""; yprima.Text = ""; y.Text=""; gdex.Text = ""; x2.Text = ""; y1.Text = ""; y2.Text = ""; texth.Text=""; puntosx.Clear(); puntosy.Clear(); listax.Items.Clear(); listay.Items.Clear(); } x1.Text = "";

Para evaluar la funcin:

namespace Ciloci.Flee { class Program_EDO { public static double f(string funcion, double x, double y, double u) {

ExpressionContext context = new ExpressionContext(); context.Imports.AddType(typeof(Math)); context.Variables["x"] = x; context.Variables["u"] = u; context.Variables["y"] = y;

IDynamicExpression eDynamic = context.CompileDynamic(funcion); double result = (double)eDynamic.Evaluate(); return result; } } }

CMO SE USA? Para empezar necesitas ejecutar el programa. Te va a mostrar una interfaz como esta:

En los siguientes 4 textbox que aparecen insertaras los valor de la ecuacin que deseas saber el resultado.

Ya puesto los valores a continuacin el usuario insertar los valores iniciales de X y Y, al igual que el salto que deseas que tenga la grfica.

Ya que estn todos los valores , se encuentran 3 botones (el usuario decide cual desea usar): Si escoge el botn solucin el programa le mostrar en los 2 cuadros que se encuentran con las variables X y Y, los valores que se han adquirido.

Se encuentra el botn Graficar, este con el uso de los valores de los cuadros de arriba , le mostrar al usuario la grfica de la ecuacin.

Y por ltimo el botn de Limpiar, el cual deja en blanco todos los espacios disponibles para poner los valores.

RESULTADOS Al trmino de este cdigo como resultado qued la interfaz, el cual resuelve tu ecuacin , esto result al principio ya que no poda poner la funcin de graficar.

Despus de que se pudo aadir esa funcin la interfaz qued de esta manera:

Dada una ecuacin por el usuario la interfaz quedara as:

COMENTARIOS Al principio no pude completar la funcin de GRAFICAR ya que tuve muchos errores al momento de implementar el mtodo de Runge-Kutta.

Ya teniendo la funcin de Solucin y Limpiar, al momento de ejecutarlo en otros equipos, nos mostraba un error que deca: No compatible con WIN32, ya que fue elaborado con el Visual Studio 2012 , en el cual para poder ejecutarlo se necesita el Framework 4.0 o ms. Para solucionar en problema en las mismas funciones de programa en lugar de X64 lo cambiamos por el X32. Haciendo este pequeo cambio se logr ejecutarlo en cualquier mquina. Pensando que si funcionaba en otras mquinas, encontramos 1 la cual no lo ejecut, as que se hizo un Ejecutable, pero sigui el mismo problema. Para estar ms segura de os resultados que se muestran en este programa, se hizo comparaciones en el software de WOLFRAM.

BIBLIOGRAFA http://www.sc.ehu.es/sbweb/fisica/cursoJava/numerico/eDiferenciales/rungeKutta/rung eKutta.ht m http://www.slideshare.net/marticalu001/mtodo-runge-kutta-computacinaplicada http://www.uam.es/personal_pdi/ciencias/fquiros/Numerico2_05_06/cap4_05_06.pdf

You might also like