MATLAB:avance ode45 solo un paso de tiempo
-
11-12-2019 - |
Pregunta
Estoy usando ode45()
en matlab para algunos trabajos en dinámica, usando este procedimiento para calcular el mayor exponente de Lyaponov del sistema de Lorenz.
El proceso implica resolver un sistema de ecuaciones diferenciales a partir de x0
, y comparando esto con una trayectoria que comienza muy cerca de x0
.
En cada paso de tiempo, es necesario reajustar la segunda trayectoria antes de avanzar el paso de tiempo, por lo que me gustaría poder llamar ode45()
sólo una vez - ¿es posible?
Aquí se presenta un intento inicial de una solución alternativa, pero no funciona;Por lo que puedo ver, las matrices. r
y R
obtenido a continuación debe ser similar:
% Time
ti = 0; tf = 1; res = 10;
T = linspace(ti, tf, res);
% Solve the system first time
[~,R] = ode45('tbmLorenz',T,x0);
% Alternate trajectory
r = zeros(size(R));
% Temporary cordinates
temp = zeros(3,3);
% Solve for second trajectory
for i = 2:(res-1)
% Time step
ts = T((i-1):(i+1));
% Solve three steps
[~,temp] = ode45('tbmLorenz',ts,r(i-1,:));
r_i = temp(2,:)
% Code to alter r_i goes here
% Save this
r(i,:) = r_i;
end
...pero no lo son:
r =
1.0000 3.0000 4.0000
9.7011 20.6113 7.4741
29.9265 16.4290 79.0449
-5.7096 -15.2075 49.2946
-12.4917 -13.6448 44.7003
-13.6131 -13.8826 45.0346
-13.5061 -13.1897 45.4782
-13.0538 -13.0119 44.5473
-13.4463 -13.8155 44.4783
0 0 0
>> R
R =
1.0000 3.0000 4.0000
9.7011 20.6139 7.4701
29.9663 16.5049 79.1628
-5.7596 -15.2745 49.3982
-12.4738 -13.5598 44.7800
-13.5440 -13.8432 44.9084
-13.5564 -13.3049 45.4568
-13.1016 -12.9980 44.6882
-13.3746 -13.7095 44.4364
-13.7486 -13.6991 45.4092
que la última línea de r
es cero no es un problema.
¿Algunas ideas?¡Salud!
Solución
Ode45 es un algoritmo adaptativo con diferentes tamaños de paso por definición.Puedes arreglar el tamaño del paso si lo deseas, pero entonces no estás usando ode45, estás usando otra cosa.
Si desea resolver este tipo de problema, le sugiero que utilice un paso de tiempo fijo. Este enlace tiene código para lo que necesitas.
Si insiste en usar ode45, debe ajustar el archivo de simulación con entradas interpoladas en el tiempo.