2012-05-18 3 views
0

Я использую ode45() в matlab для некоторой работы в динамике, используя this procedure для вычисления крупнейшего показателя Ляренцова системы Лоренца.MATLAB: advance ode45 всего лишь одноразовый шаг

Процесс включает в себя решение системы дифференциальных уравнений, начиная с x0, и сравнивая это с траекторией, начинающейся очень близко к x0.

На каждом временном шаге вторая траектория должна быть повторно отрегулировано до перехода на шаг по времени, так что я хотел бы быть в состоянии назвать ode45()только один раз - это возможно?

Здесь представлена ​​первая попытка альтернативного решения, но она не работает; насколько я могу видеть, матрицы r и R, полученные ниже, должны быть похожи:

% 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 

... но они не являются:

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 

Это последняя линия r равна нулю является не проблема.

Любые идеи? Ура! \ T

ответ

0

Ode45 - это адаптивный алгоритм с изменяющимся размером шага по определению. Вы можете исправить размер шага, если хотите, но тогда вы не используете ode45, вы используете что-то еще.

Если вы хотите решить эту проблему, я предлагаю вам использовать фиксированный временной шаг. У This link есть код, который вам нужен.

Если вы настаиваете на использовании ode45, вы должны отрегулировать сам файл моделирования с помощью интерполяции времени.

+0

Спасибо, неадаптивный - это именно то, что я искал – trolle3000