2016-08-19 12 views
1

После оптимизации моего кода, мой ode solver, ode45, занимает много времени. Но сервер только позволяет мне иметь стену 24 часа. Я не могу запросить более длинные стены. Я знаю, как сделать контрольную точку для цикла for. Но как сделать контрольную точку для ode45, эффективно?MATLAB: Checkpointing in ode function

+0

Вы можете сохранить последнее состояние своей системы, чтобы использовать его в качестве отправной точки для новой интеграции. – AVK

+0

Btw, такое длительное время интеграции является подозрительным. Может быть, ваша проблема жесткая? – AVK

+0

@AVK вы можете рассказать мне, как сохранить последнее состояние системы, чтобы использовать его в качестве отправной точки для новой интеграции. это большие системы с матрицей, поэтому я не могу ее сократить. – petersen

ответ

1

Интервал интеграции можно разделить на части. Например,

[t1,x1] = ode45(f,[0 1],x0); % integrate from 0 to 1 
save('data.mat'); % save workspace to file 
% now you can turn off your computer 
load('data.mat'); % load workspace from file 
last = x1(end,:); % obtain the last state (the last row of x1) 
[t2,x2] = ode45(f,[1 2],last); % integrate from 1 to 2 
t = [t1;t2]; % concatenate results 
x = [x1;x2]; 

эквивалентно

[t,x] = ode45(f,[0 2],x0); % integrate from 0 to 2 

Таким образом, вы можете интегрировать по первой части интервала и сохранить результаты, в следующий раз вы можете продолжать интеграцию с последней точки и т.д.

+0

't1 = [0 1]' 't2 = [1 2]'. Есть ли перекрытие в значении 1? Это проблема в ODE? – petersen

+0

Да, это так. Если это проблема, последние две строки должны быть изменены следующим образом: 't = [t1 (1: end-1); t2]; x = [x1 (1: end-1, :); x2] ' – AVK

+0

после' save ('data.mat'); ', я выключу компьютер. Но разве это не при повторном открытии моего компьютера. Я перезапущу программу, я должен начать запускать '[t1, x1] = ode45 (f, [0 1], x0);' снова? Как я могу перейти на 'load ('data.mat');' после того, как я снова открою свой компьютер? – petersen

 Смежные вопросы

  • Нет связанных вопросов^_^