lunes, 31 de enero de 2011

Métodos de Runge - Kutta


 





Introducción

De la  mano con la complejidad y formalidad que ha representado el estudio del cálculo Integral y el compromiso académico que ello rige, abrimos paso a la intención de un aprendizaje significativo de la Integral Definida en situaciones donde el integrando no tiene antiderivada elemental o cuando se desea interpretar los efectos de razones de cambio variables o constantes en funciones de una variable real con el uso de la herramienta gráfica y de cálculo: Madlad. 

En esta oportunidad usaremos Madlad como asistente para:

- Graficar funciones y familias de funciones que manualmente sería una ardua tarea. 
- Facilitarnos el cálculo de sumatorias. 
- Calcular integrales definidas con alta precisión. 
- Hacer cambios en los intervalos de integración y parámetros generales para estudiar el  comportamiento de la Integral. 
- Aportar soluciones numéricas y  gráficas a ecuaciones  Diferenciales Ordinarias con condiciones iníciales. 

Nuestra intención es reconocer lo que el aporte académico y bibliográfico especializado nos ha consolidado, y manipular esas contribuciones en un ambiente de  laboratorio de computación donde profesor y alumno experimenten de manera interactiva, cooperativa y agradable, ideas, conceptos y fundamentos Integrales.

El método de Runge-Kutta es un método genérico de resolución numérica de ecuaciones diferenciales. Este conjunto de métodos fue inicialmente desarrollado alrededor del año 1900 por los matemáticos C. Runge y M. W. Kutta.

Los métodos de Runge-Kutta logran la exactitud del procedimiento de una serie de Taylor sin requerir el cálculo de derivadas superiores.
Métodos de Runge-Kutta Los Runge-Kutta no es sólo un método sino una importante familia de métodos iterativos tanto implícitos como explícitos para aproximar las soluciones de ecuaciones diferenciales ordinarias (E.D.O´s), estas técnicas fueron desarrolladas alrededor de 1900 por los matemáticos alemanes Carl David Tolmé Runge.


Métodos de Runge - Kutta:

Los métodos de Runge-Kutta se emplean para hallar solución a las ecuaciones diferenciales ordinarias sin necesidad de calcular derivadas de orden superior. Mejoran la aproximación del método de Euler para resolver de modo aproximado el problema de valor inicial:

y`=f(t,y), y(t0)=y0

De acuerdo con la teoría, la expresión general de los métodos explícitos de s etapas de Runge- Kutta es:
Donde: 
                       
Objetivo de los métodos de Runge-Kutta:

El objetivo de los métodos numéricos de Runge-Kutta, es el análisis y solución de los problemas de valor inicial de ecuaciones diferenciales ordinarias (EDO), estos son una extensión del método de Euler para resolver las (EDO’S), pero con un orden de exactitud mas alto que este.


Métodos de Runge-Kutta de 2do. Orden

            Se encuentran basados en

           la expansión en serie de Taylor de una función y(x) alrededor de un punto x=x0 , truncada en el tercer término, es decir, en la segunda derivada
             

Donde: h=(x - x0)   Es el tamaño del paso.

El esquema empleado en Runge-Kutta de orden 2 es:

                                                                                                               
                                                
 

Donde: yi es la coordenada “y” del punto anterior, xi es la coordenada “x” del punto anterior, F(xi,yi) es la derivada evaluada en el punto anterior,  F(xi+h/2,yi+k1/2) es la derivada evaluada en el punto anterior con el cambio de variable



Métodos de Runge-Kutta de 3er. Orden

Se basa en l
a expansión en serie de Taylor de una función y(x) alrededor de un punto x=x0 , truncada en el cuarto término, es decir, en la tercera derivada.


Donde h= (x - x0)


El esquema de Discretización del Método de Runge-Kutta de orden 3 es:






                                            

Para Resolver Sistemas de Ecuaciones Diferenciales, se emplearán los siguientes esquemas:
Runge Kutta de Orden 2:




Runge Kutta de Orden 3:







Aplicaciones de Métodos de Runge Kutta en la Agroindustria:

                      
  La importancia de dichos métodos radica en que pueden emplearse para resolver situaciones que pueden presentarse en la agroindustria ó industria manufacturera en general, entre éstas se encuentran:


  •      Crecimiento Biológico: 

              Un problema fundamental en la biología es el crecimiento, sea este el crecimiento de una célula, un organismo, un ser humano, una planta o una población.




  • Problemas de Epidemiología:

        Un problema importante de la biología y de la medicina trata de la ocurrencia, propagación y control de una enfermedad contagiosa, esto es, una enfermedad que puede transmitirse de un individuo a otro. La ciencia que estudia este problema se llama epidemiología K, y si un porcentaje grande no común de una población adquiere la enfermedad, decimos que hay una epidemia.

         
Los problemas que contemplan la propagación de una enfermedad pueden ser algo complicados; para ello presentar un modelo matemático sencillo para la propagación de una enfermedad, tenemos que asumir que tenemos una población grande pero finita.


 



  •  Aplicaciones a la Economía: Oferta y demanda, inventarios, etc.
  •  Mezclas Químicas
  •   Aplicaciones a flujo de calor en estado estacionario
  •   Movimiento armónico simple.
  •   Segunda Ley de Newton.
  • Movimientos Vibratorios.
  • Estudio de Fluidos
  Si se estudia el sistema de ecuaciones que se presenta a continuación:


Algoritmo

El algoritmo empleado para Runge Kutta de orden 2 sería:

%Metodo Runge-Kutta de 2doOrden
x=2;
y=1;
t=0;
tmax=3;
h=0.2;
iter=round((tmax-t)/h);
vectorx=x;
vectory=y;
vectort=t;
for i=1:iter
    %calculo de las constantes de Runge-Kutta
    K1x=(2*(t^2+x))*h;
    K1y=(-5*t^3)*h
   
    F1=(2*(t+h/2)^2+(x+K1x/2))*h;
    F2=(-5*(t+h/2)^3)*h;
   
    x=x+F1;
    y=y+F2;
    t=t+h;
  
    vectorx=[vectorx x];
    vectory=[vectory y];
    vectort=[vectort t];
end
vectorx
vectory
vectort

subplot (1,2,1);
plot(vectort,vectorx,'y-o');
title('Metodo Runge-Kutta 2doOrden. t vs x');
xlabel('valores t');
ylabel('valores x');

subplot (1,2,2);
plot(vectort,vectory,'b-p');
title('Metodo Runge-Kutta 2doOrden. y vs t');
xlabel('valores t');
ylabel('valores y');

Para Runge Kutta de 3er orden:

Metodo Runge-Kutta de 3erOrden
x=2;
y=1;
t=0;
tmax=3;
h=0.2;
iter=round((tmax-t)/h);
vectorx=x;
vectory=y;
vectort=t;
for i=1:iteraciones
   %calculo de las constantes de Runge-Kutta
    K1x=(2*(t^2+x))*h;
    K1y=(-5*t^3)*h;
    
   
    K2x=(2*(t+h/2)^2+(x+K1x/2))*h;
    K2y=(-5*(t+h/2)^3)*h;
   
   
    K3x=(2*(t+h)^2+(x+2*K2x-K1x))*h;
    K3y=(-5*(t+h)^3)*h;
       
   
    x=x+(K1x+4*K2x+K3x)/6;
    y=y+(K1y+4*K2y+K3y)/6;
    t=t+h;
   
    vectorx=[vectorx x];
    vectory=[vectory y];
    vectort=[vectort t];
end
vectorx
vectory
vectort

subplot (1,2,1);
plot(vectort,vectorx,'y-o');
title('Metodo Runge-Kutta 3erOrden. x vs t');
xlabel('valores t');
ylabel('valores x');

subplot (1,2,2);
plot(vectort,vectory,'b-p');
title('Metodo Runge-Kutta 3erOrden. y vs t');
xlabel('valores t');
ylabel('valores y');

Ejercicios

Runge Kutta de 2do Orden.

1.     En una empresa de embutidos se notó que el crecimiento de bacteria Listeria Monocytogenes se define a partir del siguiente sistema de ecuaciones diferenciales en 3 productos distintos. Se requiere conocer gráficamente el crecimiento de la bacteria en cada producto, tomando como valores iniciales los siguientes:















                   Construyendo una tabla de resultados:




El Algoritmo en Matlab es:
%Metodo Runge-Kutta de 2doOrden
u1=2;
u2=2;
u3=1;
t=0;
tmax=2;
h=0.1;
iter=round((tmax-t)/h);
vectoru1=u1;
vectoru2=u2;
vectoru3=u3;
vectort=t;
for i=1:iter
    %calculo de las constantes de Runge-Kutta
    K1u1=(t^2+u2-u3)*h;
    k1u2=(-t^3)*h;
    k1u3=(u2+exp(-2*t))*h;
   
    F1=((t+h/2)^2+(u2+k1u2/2)-(u3-k1u3/2))*h;
    F2=(-(t+h/2)^3)*h;
    F3=((u2+k1u2/2)+exp(-2*(t+h/2)))*h;
   
    u1=u1+F1;
    u2=u2+F2;
    u3=u3+F3;
    t=t+h;
  
    vectoru1=[vectoru1 u1];
    vectoru2=[vectoru2 u2];
    vectoru3=[vectoru3 u3];
    vectort=[vectort t];
end
vectoru1
vectoru2
vectoru3
vectort

figure
subplot (2,2,1);
plot(vectort,vectoru1,'y-o');
title('Metodo Runge-Kutta 2doOrden. u1 vs t');
xlabel('valores t');
ylabel('valores u1');

subplot (2,2,2);
plot(vectort,vectoru2,'b-p');
title('Metodo Runge-Kutta 2doOrden. u2 vs t');
xlabel('valores t');
ylabel('valores u2');

subplot (2,2,3);
plot(vectort,vectoru3,'r-+');
title('Metodo Runge-Kutta 2doOrden. u3 vs t');
xlabel('valores t');
ylabel('valores u3');


La solución es:

vectoru1 =
  Columns 1 through 7
    2.0000    2.08525    2.2025    2.2656    2.3078    2.3318    2.3403
  Columns 8 through 14
    2.3351    2.3178    2.2895    2.2510    2.2024    2.1437    2.0742
  Columns 15 through 21
    1.9931    1.8988    1.7897    1.6637    1.5185    1.3513    1.1594


vectoru2 =
  Columns 1 through 7
    2.0000    2.0000    1.9996    1.9981    1.9938    1.9847    1.9680
  Columns 8 through 14
    1.9406    1.8984    1.8370    1.7512    1.6355    1.4834    1.2881
  Columns 15 through 21
    1.0420    0.7372    0.3648   -0.0844   -0.6204   -1.2535   -1.9950


vectoru3 =
  Columns 1 through 7
    1.0000    1.10952    1.5646    1.8251    2.0745    2.3142    2.5453
  Columns 8 through 14
    2.7683    2.9830    3.1885    3.3835    3.5659    3.7328    3.8807
  Columns 15 through 21
    4.0053    4.1012    4.1626    4.1823    4.1523    4.0636    3.9059


vectort =
  Columns 1 through 7
         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000
  Columns 8 through 14
    0.7000    0.8000    0.9000    1.0000    1.1000    1.2000    1.3000
  Columns 15 through 21
    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

 La solución Gráfica es:



Runge Kutta de orden 3


 
1.     La demanda de yogurt en varias ciudades del país se modela por las siguientes ecuaciones:



Muestre gráficamente el comportamiento del mercado si la demanda incrementa 20 %.
                   Solución:
                   Para este caso, la variable independiente es t, por tanto:
t1 = to + h = 0 + 0,2 = 0,2
                 
  Al igual que Runge Kutta de orden 2 se procederá a hallar las variables dependientes para lo cual se necesitan los respectivos valores de k:

k1x=hF(ti,xi,yi,zi)

k1x= 0,2* (02 + 2 +1)







(0.2, 2.804, 0.8996, 1,48)
k3x= 0,2 * (0,22 + 2.804 + 1.48)
k3x= 0,8648

k3y = h*G(t0+h, x0 + 2k2x-k1x, y0 +2k2y –k1y, z0+2k2z-k1z)

k3y= 0,2* (-0.23)

k3y = -0,0016

k3z = h*H(t0+h, x0 + 2k2x-k1x, y0 +2k2y –k1y, z0+2k2z-k1z)

k3z= 0,2* (1,48+0.89962)
k3z= 0,457856

Una vez halladas las respectivas k1, k2 y k3 por variable, se procederá a calcular las variables independientes:
x1 = x0 + (k1x+4*k2x+k3x)/6

x1 = 2 + (0,6+4*0,702+0,8648)/6

x1=2,7121

y1 = y0 + (k1y+4*k2y+k3y)/6

y1 = 1 + (0+4*(-0,0002)-0,0016)/6

y1=0,9996

z1 = z0 + (k1z+4*k2z+k3z)/6

z1 = 1 + (0,4+4*0,44+0,457856)/6

z1=1,436309333

Construyendo una tabla de resultados:


%Metodo Runge-Kutta de 3erOrden
x=2;
y=1;
z=1;
t=0;
tmax=3;
h=0.2;
iteraciones=round((tmax-t)/h);
vectorx=x;
vectory=y;
vectorz=z;
vectort=t;
for i=1:iteraciones
   %calculo de las constantes de Runge-Kutta
    K1x=(t^2+x+z)*h;
    K1y=(-t^3)*h;
    K1z=(z+y^2)*h; 
   
    K2x=((t+h/2)^2+(x+K1x/2)+(z+K1z/2))*h;
    K2y=(-(t+h/2)^3)*h;
    K2z=((z+K1z/2)+(y+K1y/2)^2)*h;
   
    K3x=((t+h)^2+(x+2*K2x-K1x)+(z+2*K2z-K1z))*h;
    K3y=(-(t+h)^3)*h;
    K3z=((z+2*K2z-K1z)+(y+2*K2y-K1y)^2)*h;   
   
    x=x+(K1x+4*K2x+K3x)/6;
    y=y+(K1y+4*K2y+K3y)/6;
    z=z+(K1z+4*K2z+K3z)/6;
    t=t+h;
   
    vectorx=[vectorx x];
    vectory=[vectory y];
    vectorz=[vectorz z];
    vectort=[vectort t];
end
vectorx
vectory
vectorz
vectort

figure
subplot (2,2,1);
plot(vectort,vectorx,'y-o');
title('Metodo Runge-Kutta 3erOrden. x vs t');
xlabel('valores t');
ylabel('valores x');

subplot (2,2,2);
plot(vectort,vectory,'b-p');
title('Metodo Runge-Kutta 3erOrden. y vs t');
xlabel('valores t');
ylabel('valores y');

subplot (2,2,3);
plot(vectort,vectorz,'r-x');
title('Metodo Runge-Kutta 3erOrden. z vs t');
xlabel('valores t');
ylabel('valores z');

figure
plot(vectort,vectorx,'y-o');
hold on
plot(vectort,vectory,'b-p');
plot(vectort,vectorz,'r-x');
xlabel('valores t');
ylabel('valores x,y,z');
legend('x','y','z');
title('Metodo Runge-Kutta 3erOrden.soluciones del sistema de ecuaciones');
                  

La solución es:
vectorx =
  Columns 1 through 7
    2.0000    2.7121    3.7072    5.0889    6.9870    9.5621   13.0114
  Columns 8 through 14
   17.5784   23.5731   31.4160   41.7302   55.5229   74.5253  101.7953
  Columns 15 through 16
  142.7467  206.8425

vectory =
  Columns 1 through 7
    1.0000    0.9996    0.9936    0.9676    0.8976    0.7500    0.4816
  Columns 8 through 14
    0.0396   -0.6384   -1.6244   -3.0000   -4.8564   -7.2944  -10.4244
  Columns 15 through 16
  -14.3664  -19.2500

vectorz =
  Columns 1 through 7
    1.0000    1.4426    1.9823    2.6352    3.4139    4.3246    5.3728
  Columns 8 through 14
    6.5856    8.0707   10.1411   13.5512   19.9089   32.3546   56.6304
  Columns 15 through 16
  102.7057  187.1754

vectort =
  Columns 1 through 7
         0    0.2000    0.4000    0.6000    0.8000    1.0000    1.2000
  Columns 8 through 14
    1.4000    1.6000    1.8000    2.0000    2.2000    2.4000    2.6000
  Columns 15 through 16
    2.8000    3.0000
Las soluciones Gráficas son:
  

Conclusión
Hemos presentado la idea de un tratamiento didáctico para una salida al rigor en la noción de la Integral Definida en una variable usando Madlad, una sofisticada herramienta que nos ha permitido analizar los efectos totales de cambio en funciones de una variable esgrimiendo cálculos repetitivos, dando así la oportunidad de cómodas y nutritivas experiencias pedagógicas que nos ayuda a enfrentar por primera vez a tal complejidad, y más importante aún, permite construir experiencias de aprendizaje a partir del análisis e identificación del proceso numérico a seguir según las condiciones del problema.
La simulación se ha convertido en una herramienta fundamental del ingeniero puesto que permite establecer las dimensiones geométricas y las condiciones límites y normales de operación de los equipos de proceso, razones por las cuales es necesario el desarrollo de modelos cada vez más rigurosos que representen con precisión el fenómeno al que corresponden.
Dado que las ecuaciones de estado producen resultados acertados, las fallas en las ecuaciones de estado deben estar en los modelos empleados para obtener sus parámetros, por lo cual es necesario desarrollar reglas que se apliquen a todo tipo de mezclas y que sean teóricamente correctas, de manera que puedan generarse datos confiables.
Dado que existe un elevado número de métodos numéricos, deben establecerse criterios eficaces de decisión que permitan seleccionar el más adecuado de acuerdo con los requerimientos del problema y tomando en cuenta las limitaciones del equipo en el que se planea llevar a cabo los cálculos. Los criterios deben considerar la estabilidad del método, el tipo de sistema a resolver y su posible rigidez, el manejo de errores y el tamaño del paso, entre otros.
La interfaz gráfica garantiza el hecho de que el sistema que se desea simular quede completamente especificado puesto que obliga el ingreso de los datos necesarios para que los grados de libertad sean cero y de otra forma no permite realizar la simulación.
Los sistemas algebraico-diferenciales no poseen un método general que permita su resolución, razón por la cual es necesario desarrollar en cada caso específico un algoritmo de solución que organice las ecuaciones y administre la aplicación de los métodos numéricos, de tal forma que la solución pueda alcanzarse.

Bibliografía:
Steven C. Chapra, Raymond P. Canale Editorial: MGH La quinta edición de Métodos numéricos para ingenieros