МАТЛАБ:продвинуться вперед ode45 всего на один шаг
-
11-12-2019 - |
Вопрос
я использую ode45()
в Matlab для некоторой работы по динамике, используя эта процедура вычислить наибольший показатель Ляпонова системы Лоренца.
Процесс включает в себя решение системы дифференциальных уравнений, начиная с 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
равен нулю, это не проблема.
Есть идеи?Ваше здоровье!\Т
Решение
Ode45 — это адаптивный алгоритм с изменяющимся размером шага по определению.Вы можете исправить размер шага, если хотите, но тогда вы используете не ode45, а что-то другое.
Если вы хотите решить задачу такого типа, я предлагаю вам использовать фиксированный временной шаг. Эта ссылка есть код для того, что вам нужно.
Если вы настаиваете на использовании ode45, вам необходимо настроить сам файл моделирования с помощью интерполированных по времени входных данных.