2016-08-19 91 views
1

优化我的代码后,我的ode求解器ode45花了很长时间才完成。但服务器只允许我有24小时的壁挂时间。我不能要求更长的时间。我知道如何为for循环检查点。但如何有效地检查点ode45MATLAB:检查点功能

+0

您可以存储系统的最后一个状态,以此作为新集成的起点。 – AVK

+0

顺便说一句,这么长的积分时间是可疑的。可能是你的问题僵硬? – 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]'save('data.mat')''后 – AVK

+0

;',我关掉电脑。但是,当我重新打开计算机时,是不是重新运行程序,我必须开始运行'[t1,x1] = ode45(f,[0 1],x0);''如何跳到'load('data.mat');'我重新打开电脑后? – petersen