Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SIMULACION
DE PROCESOS INDUSTRIALES II
(701)
TALLER # 6
METODO DE RUNGE KUTTA Y METODO DE EULER
CURSO: 7-1
FECHA DE ENTREGA:
LUNES 14 DE ENERO DEL 2019
Sea y ′ ( t ) = f ( t , y ( t ) )
Métodos 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:
Como en los métodos anteriores, se determina primero la malla {t 0, 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, w 1 + w2 + ... + wm
= 1, y cada kj es la función f evaluada en un punto seleccionado (t, y) para el
cual ti ≤ t ≤ ti+1. Se mostrará que los kj se definen en forma recursiva.
(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)
(7
)
donde el subíndice i indica que todas las derivadas están evaluadas en el punto
(ti, yi).
(8
)
(9
)
(11
)
(12
)
(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 h 3 en las
expresiones (10) y (12) coincidan. Esto obviamente no se logra para cualquier
f.
(14)
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.
(16)
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.
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.
Resulta entonces,
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:
y = ode4 (odefun, tspan, y0);
function [t,y]=odegil4(f,x,y0,h)
%[t,y]=odegil4(f,x,y0,h),resuelve ecuaciones y'=f(t,y),
%x vector en linea de la variabe independiente,
%yo vector en linea de las condiciones iniciales,
%h paso de integración
%---------------------------------------------------------------------
-----
x=x';t=[];t(1)=x(1);y=y0;
N=(x(length(x))-x(1))/h; Ne=length(y0);
for I=1:N
T=t(I);
Y=y(I,:);
for J=1:Ne
p=h*feval(f,T,Y');
q=h*feval(f,T+h/2,Y'+p/2);
r=h*feval(f,T+h/2,Y'+q/2);
s=h*feval(f,T+h,Y'+r);
end
t(I+1)=t(1)+h*I;
Inc=(p+2*q+2*r+s)/6;
y(I+1,:)=y(I,:)+Inc';
end
y=spline(t,y',x);
y=[reshape(y,Ne,length(x))]';
t=x;
end
En Matlab:
Este no posee resultado ya que necesitamos un script para llamar a esta función
con la integración de los valores encontrados en el primer script, para luego
obtener un grafica como resultado final.
En Matlab:
RESULTADO:
ANALISIS DEL SCRIP
Scrip con nombre de odegil4:
Análisis: Nos muestra un mensaje diciendo con indicaciones para resolver las
siguientes ecuaciones EDO.
Análisis: Nos permite dar por finalizado las instrucciones establecidas para la
nueva función permitiéndome cerrar uno de los ciclos for.
Análisis: En esta línea queda definido que el vector t sera equitativamente igual
al vector x.
%------------------------------------------------------
Scrip con nombre de ecudif.m:
Análisis: Establece el vector y0 con un comentario que indica que son las
condiciones iniciales.
y 0 = t − y y(0) = 1 t ∈ [0, 1]
Solución:
Análisis: Se declara la función EULER, que recibe como valor de entrada a las
variables (F, a, b, Y0, N) y determina las variables de salidas t ,y.
Análisis: En esta línea feval permite evaluar el ciclo que se inicio para la variable
J una vez que se encuentre el valor el ciclo se dará por finalizado.
COMANDOS NUEVOS:
COMANDO TIC
MATLAB incluye dos funciones tic y TOC. Si se llama a TIC antes de que se
programe algo, y se invoca TOC después, TOC imprimirá el tiempo de reloj de
pared transcurrido si su valor no se copia a una variable, o devolverá el valor del
tiempo de reloj de pared transcurrido a una variable.
Sintaxis
toc
elapsedTime = toc
toc(timerVal)
elapsedTime = toc(timerVal)
Descripción
Toc lee el tiempo transcurrido desde el temporizador de cronómetro iniciado por
el tic función. La función lee el tiempo interno en la ejecución del toc comando y
muestra el tiempo transcurrido desde la última llamada al tic función que no tuvo
salida, en segundos.
elapsedTime = toc devuelve el tiempo transcurrido en una variable.
toc(timerVal)muestra el tiempo transcurrido desde el tic comando
correspondiente a timerVal.
elapsedTime = toc(timerVal)devuelve el tiempo transcurrido desde el tic
comando correspondiente a timerVal.
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
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
Información sobre el manejo de la función
Sintaxis
s = functions(fh)
Descripción
Nota
Ejemplos
Mostrar información sobre la función nombrada Manejar
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=
función: '@ (x) x. ^ 2 + y'
tipo: 'anónimo'
archivo: ''
espacio de trabajo: {[1x1 struct]}
within_file_path: '__base_function'
y: 7
Mostrar información sobre el identificador de función anidada y local
hNest = @nestFunction;
hLocal = @localFunction;
fin
Invoca la función.
@ functionsExample / nestFunction
hLocal =
@localFunction
s2 = funciones (hLocal)
s2 =
función: 'localFunction'
tipo: 'función de alcance'
archivo: 'C: \ work \ functionsExample.m'
parentage: {'localFunction' 'functionsExample'}
Argumentos de entrada
fh - fh para consultar manejar la función
Argumentos de salida
s - Información sobre el manejo de la función estructura
Nombre del
campo Descripción
campo
Nombre de la función. Si la función asociada con el identificador es
function una función anidada, el nombre de la función toma la forma
main_function / nested_function .
Tipo de función Por ejemplo, 'simple' , 'nested' , 'scopedfunction' o
type
'anonymous' .
Ruta completa a la función con la extensión de archivo.
RETURN:
ZEROS (mathworks)
Ejemplos:
1. Crea una matriz de ceros de 4 por 4.
X = zeros (4)
X=
0000
0000
0000
0000
2. Cree una matriz de ceros que sea del mismo tamaño que una matriz
existente.
A = [1 4; 2 5; 3 6];
sz = length(A);
X = zeros (sz)
X=
00
00
00
RESHAPE
Cambiar la forma de matriz
Sintaxis
B = reshape(A,sz)
B = reshape(A,sz1,...,szN)
Descripción
Ejemplos
Cambiar la forma de Vector a matriz
A = 1:10;
B = reshape(A,[5,2])
B = 5×2
1 6
2 7
3 8
4 9
5 10
Cambiar la forma de matriz para ha especificado el número de columnas
Cambiar la forma de una matriz cuadrada de 4 por 4 en una matriz que tiene 2 columnas.
Especificar [] para la primera dimensión hacerle reshape calcular automáticamente el
número adecuado de filas.
A = magic(4)
A = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
B = reshape(A,[],2)
B = 8×2
16 3
5 10
9 6
4 15
2 13
11 8
7 12
14 1
El resultado es una matriz de 8 por 2, que mantiene el mismo número de elementos que
la matriz original. Los elementos de B también mantienen su orden columnwise de A.
Remodelar la matriz Multidimensional en la matriz
Cambiar la forma de una matriz de 3 por 2 por 3 de ceros en una matriz de 9-2.
A = zeros(3,2,3);
B = reshape(A,9,2)
B = 9×2
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
SPLINE
Sintaxis
s = spline(x,y,xq)
pp = spline(x,y)
Descripción
x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');
CONCLUSIONES
Encontramos que las subrutinas soportadas muestran errores en el rango de 0.1 a 0.5%;
mientras que ode4 muestra un error máximo de menos de 10 ^ -7%, es decir, 10 ^ 6 veces
más pequeño. Estos resultados indican que ode4 debería ser probablemente la primera
subrutina de Runge-Kutta que se intenta resolver para ODE. 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. Los scripts adjuntos resuelven la Ecuación Diferencial
Ordinaria de Vector de Órbita de Dos Órganos usando una subrutina compatible con
MATLAB ode45, ode23 u ode23s y también usando una subrutina ode4 no soportada
simple (disponible en el archivo adjunto y en cualquier otro lugar en File Exchange).
REFERENCIAS
http://campus.usal.es/~mpg/Personales/PersonalMAGL/Docencia/MetNumTem
a4Teo(09-10).pdf
mathwoks. (s.f.). Recuperado el 15 de enero de 2018, de mathworks:
https://la.mathworks.com/help/matlab/ref/toc.html?searchHighlight=toc&s_ti
d=doc_srchtitle
Matlab y sus aplicaciones en las Ciencias y la Ingeniería. Cesar Pérez. Prentice Hall,
Madrid, 2002.
Métodos numéricos – Teoría, problemas y prácticas con MATLAB. Infante del Río J-A. &
Rey Cabezas J. M. 2da Edición - Pirámide. 2002.
http://personales.unican.es/meperez/GRADO_ICIVIL/practicas/ED_PR3_4_2012_13_en
web.pdf