MATLAB:ode 函数中的检查点

MATLAB: Checkpointing in ode function

优化我的代码后,我的 ode 求解器 ode45 需要很长时间才能完成。但是服务器只允许我有 24 小时的 walltime。我不能要求更长的墙时间。我知道如何为 for 循环做检查点。但是如何有效地为 ode45 设置检查点?

一个积分区间可以分成几个部分。例如,

[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

所以你可以在区间的第一部分积分并保存结果,下次你可以从最后一点继续积分,等等