MATLAB:ode函数中的检查点

MATLAB:ode函数中的检查点,matlab,cluster-computing,ode,hpc,differential-equations,Matlab,Cluster Computing,Ode,Hpc,Differential Equations,优化代码后,我的ode解算器ode45需要很长时间才能完成。但是服务器只允许我有24小时的walltime。我不能要求更长的时间。我知道如何为循环设置检查点。但是如何高效地为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

优化代码后,我的ode解算器ode45需要很长时间才能完成。但是服务器只允许我有24小时的walltime。我不能要求更长的时间。我知道如何为
循环设置检查点。但是如何高效地为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

因此,您可以在间隔的第一部分进行集成并保存结果,下次您可以从最后一点继续集成,等等。

您可以存储系统的最后一个状态,将其用作新集成的起点。顺便说一句,如此长的集成时间令人怀疑。可能是您的问题很棘手?@AVK您能告诉我如何存储系统的最后状态,以便将其用作新集成的起点。它们是涉及矩阵的大型系统,因此我无法将其缩短到更低的长度。
t1=[01]
t2=[12]
。值1中是否存在重叠?这是ODE中的问题吗?是的。如果这是一个问题,最后两行应该修改如下:
t=[t1(1:end-1);t2];x=[x1(1:end-1,:);x2]
save('data.mat')之后,我关掉电脑。但是当我重新打开我的计算机时,我重新运行我必须开始运行的程序,
[t1,x1]=ode45(f[01],x0)又来了?如何跳转到
load('data.mat')重新打开计算机后?有很多方法可以从上一个状态继续集成。例如,您可以在加载
数据后从
t1(end)
开始集成。mat
[t2,x2]=ode45(f,[t1(end)t1(end)+1],last)。或者,您的程序中可以有几个m文件