Академический Документы
Профессиональный Документы
Культура Документы
SIMULACIÓN DE PROCESOS II
TALLER #3
METODO DE RUNGE KUTTA
2DO PARCIAL
ESTUDIANTE:
SARA VERA HERNÁNDEZ
CURSO:
7MO SEMESTRE PARALELO “7-1”
Sea y ′ ( t ) = f ( t , y ( t ) )
La positiva es la llamada unidad imaginaria. Esta notación fue utilizada, de esta manera
por primera vez por Leonard Euler en 1779 y abre el camino a una rama muy interesante
de las matemáticas: el análisis de variable compleja, el cual veremos en estas secciones
MARCO TEORICO
Método de Runge-Kutta.
En esta sección nos limitamos a describir uno de los métodos de tipo Runge-Kutta más
utilizados en la práctica y cuyo orden de convergencia es 4 (lo que equivaldría a utilizar
un método basado en el desarrollo de Taylor hasta h4). Este método suele
denominarse método de Runge-Kutta clásico.
El método se describe como sigue:
Ejemplo
Se considera el problema de Cauchy o de valores iniciales:
Como en los métodos anteriores, se determina primero la malla {t0, t1, ... , tN} de paso
h, donde t0 = a y tN = b. En estos puntos es donde se va a obtener la aproximación de
la solución.
En esta expresión las ponderaciones wi, i = 1, ..., m son constantes para las que en
general se pide que su suma sea igual a 1, es decir, w1 + w2 + ... + wm = 1, y cada kj es la
función f evaluada en un punto seleccionado (t, y) para el cual t i ≤ t ≤ ti+1. Se mostrará
que los kj se definen en forma recursiva.
Se define como orden del método al número m, es decir, a la cantidad de términos
que se usan en el promedio ponderado.
(3)
(4)
y teniendo en cuenta que yi @ y(ti), resulta k1= f(ti, yi), obteniendo así la fórmula de
Euler yi+1 = yi + h f(ti, yi). Por lo tanto, se dice también que el método de Euler es un
método de Runge Kutta de primer orden.
(5)
donde
(6)
Para ello, utilizando un desarrollo de Taylor para funciones de dos variables, tenemos
que:
(7
)
donde el subíndice i indica que todas las derivadas están evaluadas en el punto (ti, yi).
Reemplazando k1 y teniendo en cuenta la expresión de k2, usando (7) tenemos que:
(8
)
(9
)
(1
0)
Por otro lado, se hace un desarrollo de Taylor de orden 3 de la función y(t), calculado
en el punto ti+1, obteniendo:
(11)
(12
)
Comparando las expresiones (10) y (12), e igualando los coeficientes de h y h2, se tiene:
(13)
Sucede que se tienen cuatro incógnitas, pero tres ecuaciones, con lo que queda un
grado de libertad en la solución del sistema dado en (13). Se trata de usar este grado
de libertad para hacer que los coeficientes de h3 en las expresiones (10) y (12)
coincidan. Esto obviamente no se logra para cualquier f.
(14)
(15)
Mejora entonces el método de Euler, por lo que se espera poder usar con este método
un paso mayor. El precio que debe pagarse en este caso, es el de evaluar dos veces la
función en cada iteración.
Si ahora m = 4, se obtiene, con un desarrollo del tipo del anterior, la siguiente fórmula,
para i desde 0 hasta N-1:
(16)
Si bien con facilidad se pueden deducir otras fórmulas, el algoritmo expresado en (16)
se denomina método de Runge-Kutta de cuarto orden, o método clásico de Runge-
Kutta, abreviado como RK4. Este algoritmo es de uso extendido, y reconocido como
una valiosa herramienta de cálculo, por la buena aproximación que produce.
Esta fórmula tiene un error de truncamiento local de O(h 5), y un error global de
O(h4). De nuevo, el precio que se debe pagar por la mejora en el error, es una mayor
cantidad de evaluaciones de la función, resultando en un mayor tiempo de cálculo si
la función es complicada. Tiene la ventaja, sobre el método de Taylor de orden 4 (cuyo
error global es también O(h4), que no requiere el cálculo de las derivadas de f.
Implementación del método RK4
Ejemplo
Con el método RK4, obtener una aproximación del valor de y(1,5) para el siguiente
problema de valor inicial, tomando un paso h = 0,1.
El primer paso para resolver este problema es determinar la malla de puntos en donde
se va a obtener la solución.
Por lo tanto, los puntos en donde se va a determinar la solución, dados por la fórmula
ti = 1 + 0,1 i, para i =1,2,3,4,5, son:
t1 = 1,1
t2 = 1,2
t3 = 1,3
t4 = 1,4
t5 = 1,5
Resulta entonces,
Al analizar la tabla anterior y comparar los resultados obtenidos con el método RK4
con los valores reales, se ve por qué es tan difundido este método. En la próxima tabla
se comparan los métodos de Euler y Runge Kutta de orden 4 para el mismo problema.
La capacidad de usar un solucionador de pasos fijos no está incorporada en MATLAB 8.0
(R2012b).
Los solucionadores de MATLAB ODE utilizan estos métodos dando un paso, estimando
el error en este paso, verificando si el valor es mayor o menor que la tolerancia, y
modificando el tamaño del paso en consecuencia. Estos métodos de integración no se
prestan a un tamaño de paso fijo. Usar un algoritmo que use un tamaño de paso fijo es
peligroso ya que puede perder puntos donde la frecuencia de la señal es mayor que la
frecuencia del solucionador. El uso de un paso variable garantiza que se use un tamaño
de paso grande para frecuencias bajas y un paso pequeño para frecuencias altas. Los
solucionadores de ODE dentro de MATLAB están optimizados para un paso variable, se
ejecutan más rápido con un tamaño de paso variable y, claramente, los resultados son
más precisos.
ODETest
Estos están incluidos en el archivo zip adjunto. Después de guardar los archivos
en una carpeta ubicada en la ruta MATLAB, estos solucionadores se pueden
usar con la siguiente sintaxis:
La integración procede por pasos, llevados a los valores especificados en tspan. Los
valores de tiempo deben estar en orden, ya sea aumentando o disminuyendo. Tenga en
cuenta que el tamaño del paso (la distancia entre elementos consecutivos de tspan) no
tiene que ser uniforme. Si el tamaño del paso es uniforme, es posible que desee utilizar
LINSPACE.
Por ejemplo,
Dado que estos archivos no se envían con MATLAB, estos solucionadores no son
compatibles oficialmente.
Este ejemplo muestra cómo la elección del algoritmo de estimación puede afectar los
resultados de una estimación del modelo de caja gris no lineal. Utilizamos datos
producidos por un sistema de péndulo no lineal, que se muestra esquemáticamente en
la figura 1. En particular, mostramos cómo la opción del solver de ecuación diferencial
repercute en los resultados.
Datos de salida
Comenzamos nuestro recorrido modelado por la carga de los datos de salida
(datos de series de tiempo). Los datos contienen una salida, y, que es la posición
angular del péndulo [rad]. El ángulo es cero cuando el péndulo está apuntando
hacia abajo, y aumenta hacia la izquierda. Hay 1001 muestras (simuladas) de puntos de
datos y el tiempo de la muestra es de 0,1 segundos. El péndulo se ve afectado por una
fuerza de gravedad constante, pero ninguna otra fuerza exógena afecta el movimiento del
péndulo. Para investigar esta situación, creamos un objeto IDDATA:
En una ventana de diagrama se muestra la posición angular del péndulo (la salida).
Modelado de péndulo
Antes de calcular cualquier parámetro se simula el sistema con los valores de parámetro
adivinado. Hacemos esto para tres de los solvers disponibles, Euler hacia adelante con la
longitud de paso fijo (ode1), Runge-Kutta 23 con longitud de paso adaptativo (ode23) y
Runge-Kutta 45 con longitud de paso adaptativo (ode45). Los resultados obtenidos al usar
estos tres problemas se muestran en una ventana de diagrama.
% A. Model computed with first-order Euler forward ODE
solver.
nlgref = nlgr;
nlgref.SimulationOptions.Solver = 'ode1'; % Euler
forward.
nlgref.SimulationOptions.FixedStep = z.Ts*0.1; % Step
size.
Figura 3: Comparación entre la salida real y las salidas simuladas de los tres modelos de
péndulo inicial.
Como puede verse, el resultado con el método delantero de Euler (con una cuadrícula más
fina de lo que se utiliza por defecto) difiere significativamente de los resultados obtenidos
con el Runge-Kutta solvers. En este caso, resulta que el solucionador de Euler hacia
adelante produce un resultado bastante bueno (en términos de ajuste del modelo),
mientras que los resultados obtenidos con el Runge-Kutta solvers son un poco limitadas.
Sin embargo, esto es algo engañoso, como será evidente más adelante, porque el valor
inicial de b, el coeficiente de fricción viscosa, es dos veces tan grande como en realidad.
Estimación de parámetros
La constante gravitacional, g, la longitud de la varilla, l y la masa de la sacudida,
m, fácilmente pueden ser medidos o tomados de una tabla sin estimación. Sin
embargo, esto normalmente no es el caso con los coeficientes de fricción, que a
menudo debe ser estimado. Por lo tanto fijamos los tres parámetros anteriores a g = 9.81,
l = 1 y m = 1 y considerar sólo b como parámetro libre:
trk23 = clock;
nlgrrk23 = nlgreyest(z, nlgrrk23, opt); % Perform parameter
estimation.
trk23 = etime(clock, trk23);
trk45 = clock;
nlgrrk45 = nlgreyest(z, nlgrrk45, opt); % Perform parameter
estimation.
trk45 = etime(clock, trk45);
A continuación se resumen los resultados al usar estos tres problemas. El verdadero valor
de b es 0,1, que se obtiene con ode45. ode23 devuelve un valor bastante cercano a 0,1,
mientras ode1 devuelve un valor absolutamente una distancia de 0.1.
Sin embargo, esto no significa que las salidas simuladas difieren que mucho de
la salida real, porque los errores producción por los solvers de ecuación diferencial
diferentes son típicamente representaron en el procedimiento de estimación. Esto es un
hecho que fácilmente puede verse mediante la simulación de los tres modelos de péndulo
estimado.
Figura 4: Comparación entre la verdadera salida y las salidas simuladas de los tres
modelos de péndulo estimado.
Como era de esperar teniendo en cuenta esta cifra, el Error de predicción Final (FPE),
valores de criterio de estos modelos son también bastante cerca entre sí:
return;
%%Aproximacion a la solucion del problema del valor inicial
%y´= f(t,x) con y0=y(a) el intervalo [a, b],
%mediante el metodo de Runge-Kutta de segundo orden
%---------------------------------------------%
clear,clc
[x,y]=RK2(@ODEF1, 0, 0.4, 1, 4)
COMANDOS
FEVAL
Sintaxis
[y1,...,yN] = feval(fun,x1,...,xM)
Descripción
La función feval sigue las mismas reglas de alcance y precedencia que llamar
directamente a un identificador de función. Para obtener más información.
Ejemplos
diversión = 'ronda' ;
x1 = pi;
y = feval (diversión, x1)
y=3
Redondee el valor de pi a dos dígitos a la derecha del punto decimal.
x2 = 2;
y = feval (diversión, x1, x2)
y = 3.1400
Argumentos de entrada
depende de la función
Argumentos de salida
depende de la función
Consejos
funciones
Sintaxis
s = functions(fh)
Descripción
Nota
Ejemplos
fh = @cos;
s = funciones (fh)
s = struct con campos:
función: 'cos'
tipo: 'simple'
archivo: ''
y = 7;
fh = @ (x) x. ^ 2 + y;
z = fh (2)
z =
11
s = funciones (fh)
s =
y: 7
Cree una función que devuelva identificadores a funciones locales y anidadas. Muestra
su información.
hNest = @nestFunction;
hLocal = @localFunction;
fin
Invoca la función.
hLocal =
@localFunction
s1 = funciones (hNest)
s1 =
s2 = funciones (hLocal)
s2 =
función: 'localFunction'
tipo: 'función de alcance'
archivo: 'C: \ work \ functionsExample.m'
parentage: {'localFunction' 'functionsExample'}
Argumentos de entrada
Argumentos de salida
Nombre del
campo Descripción
campo
Nombre de la función. Si la función asociada con el identificador es una
function función anidada, el nombre de la función toma la forma
main_function / nested_function .
Tipo de función Por ejemplo, 'simple' , 'nested' ,
type
'scopedfunction' o 'anonymous' .
Nombre del
campo Descripción
campo
Ruta completa a la función con la extensión de archivo.
CONCLUSIONES
En base a esto que podemos concluir que los tres modelos son capaces de captar la
dinámica del péndulo, pero el modelo basado en adelante Euler refleja que subyacente
física bastante mal. La única manera de aumentar su rendimiento de "física" es disminuir
la longitud de paso de los problemas, pero esto también significa que aumenta
significativamente el tiempo de solución. Nuestros experimentos indican que el Runge-
Kutta 45 solver es el mejor solucionador para problemas no rígida al tomar velocidad
computacional en cuenta y precisión.