Você está na página 1de 7

MTODO RK4 EN VISUAL BASIC OBJETIVOS: Hallar la concentracin de salida a cualquier tiempo de un sistema de 3 tanques de mezcla que opera

ra en estado estacionario, utilizando un programa en Visual Basic. Elaborar un interfaz que nos permita ingresar los valores de las variables iniciales, as como observar cada iteracin.

MARCO TEORICO Los mtodos de Runge-Kutta (RK) son un conjunto 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 conjunto abierto, junto con la condicin de que el valor inicial de sea

donde

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 tn entre los sucesivos puntos tn y tn + 1. Los coeficientes ki son trminos de aproximacin intermedios, evaluados en de manera local

con aij,bi,ci 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 aij del esquema. Si esta matriz es triangular inferior con todos los elementos de la diagonal principal iguales a cero; es decir, aij = 0 para j = i,...,s, los esquemas son explcitos.

Mtodos de Runge-Kutta 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. Definamos 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 k1 es la pendiente al principio del intervalo, k2 es la pendiente en el punto medio del intervalo, usando k1 para determinar el valor de y en el punto usando el mtodo de Euler. k3 es otra vez la pendiente del punto medio, pero ahora usando k2 para determinar el valor de y k4 es la pendiente al final del intervalo, con el valor de y determinado por k3. 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 O(h5), mientras que el error total acumulado tiene el orden O(h4).

INTERFAZ

CODIGO: Public Class Form1 Public Function EDO1(ByVal f1, ByVal ce, ByVal v, ByVal f2, ByVal C1) EDO1 = ((f1 * ce) / v) - ((f2 * C1) / v) End Function Public Function EDO2(ByVal f2, ByVal C1, ByVal v, ByVal f3, ByVal C2) EDO2 = ((f2 * C1) / v) - ((f3 * C2) / v) End Function Public Function EDO3(ByVal f3, ByVal C2, ByVal v, ByVal f4, ByVal C3) EDO3 = ((f3 * C2) / v) - ((f4 * C3) / v)

End Function Private Sub Button1_Click(ByVal sender System.EventArgs) Handles Button1.Click Dim i As Single Dim fe As Double Dim f1 As Double Dim f2 As Double Dim f3 As Double Dim f4 As Double Dim ce As Double Dim C1 As Double Dim C2 As Double Dim C3 As Double Dim v As Double Dim Ti As Double Dim tf As Double Dim K11 As Double Dim K12 As Double Dim K13 As Double Dim K21 As Double Dim K22 As Double Dim K23 As Double Dim K31 As Double Dim K32 As Double Dim K33 As Double Dim K41 As Double Dim K42 As Double Dim K43 As Double As System.Object, ByVal e As

Dim h As Double Dim C1IMAS1 As Double Dim C2IMAS1 As Double Dim C3IMAS1 As Double Dim timas1 As Double

fe = Val(TextBox12.Text) f1 = Val(TextBox1.Text) f2 = Val(TextBox4.Text) f3 = Val(TextBox6.Text) f4 = Val(TextBox8.Text) ce = Val(TextBox2.Text) C1 = Val(TextBox3.Text) C2 = Val(TextBox5.Text) C3 = Val(TextBox7.Text) v = Val(TextBox9.Text) h = Val(TextBox10.Text) tf = Val(TextBox11.Text) Ti = 0

For i = 0 To tf K11 = EDO1(f1, ce, v, f2, C1) K12 = EDO2(f2, C1, v, f3, C2) K13 = EDO3(f3, C2, v, f4, C3) K21 = EDO1(f1, ce, v, f2, (C1 + ((h / 2) * K11))) K22 = EDO2(f2, (C1 + ((h / 2) * K11)), v, f3, (C2 + ((h / 2) * K12)))

K23 = EDO3(f3, (C2 + ((h / 2) * K12)), v, f4, (C3 + ((h / 2) * K13))) K31 = EDO1(f1, ce, v, f2, (C1 + ((h / 2) * K21))) K32 = EDO2(f2, (C1 + ((h / 2) * K21)), v, f3, (C2 + ((h / 2) * K22))) K33 = EDO3(f3, (C2 + ((h / 2) * K22)), v, f4, (C3 + ((h / 2) * K23))) K41 = EDO1(f1, ce, v, f2, (C1 + (h * K31))) K42 = EDO2(f2, (C1 + (h * K31)), v, f3, (C2 + (h * K32))) K43 = EDO3(f3, (C2 + (h * K32)), v, f4, (C3 + (h * K33)))

C1IMAS1 = C1 + ((h / 6) * (K11 + 2 * K21 + 2 * K31 + K41)) C2IMAS1 = C2 + ((h / 6) * (K12 + 2 * K22 + 2 * K32 + K42)) C3IMAS1 = C3 + ((h / 6) * (K13 + 2 * K23 + 2 * K33 + K43)) timas1 = h + Ti DataGridView1.Rows.Add(timas1, C1, C2, C3, K11, K12, K13, K21, K22, K23, K31, K32, K33, K41, K42, K43, C1IMAS1, C2IMAS1, C3IMAS1) C1 = C1IMAS1 C2 = C2IMAS1 C3 = C3IMAS1 If Math.Abs(Ti) = tf Then Exit For Else Ti = timas1 End If Next End Sub Private Sub Button2_Click(ByVal sender System.EventArgs) Handles Button2.Click DataGridView1.Rows.Clear() End Sub As System.Object, ByVal e As

Private Sub Button3_Click(ByVal sender System.EventArgs) Handles Button3.Click End End Sub End Class

As

System.Object,

ByVal

As

CONCLUSIONES: Aprendimos a utilizar un mtodo fcil y sencillo numrico RK4. Se utiliz un procedimiento numrico para resolver el problema: el mtodo de Runge Kutta de 4 orden. Con la prctica hemos hallado la concentracin final en cualquier tiempo en un sistema de tres tanques operando en un estado estacionario y creando una interfaz sencilla de operar. Con la prctica realizamos la un programa en el cual ingresamos los valores iniciales y obtuvimos el valor deseado de una manera muy sencilla de operar, poniendos en practicas la programacin estudiada en cursos anteriores

BIBLIOGRAFIA

http://es.wikipedia.org/wiki/M%C3%A9todo_de_Runge-Kutta http://www.tonahtiu.com/notas/metodos/Runge_kutta4.htm http://www.unizar.es/acz/02AcademicosNumerarios/Discursos/Calvo.pdf

Você também pode gostar