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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top