在Matlab/Simulink中增加montecarlo模拟的模拟时间
我正在为Simulink模型运行Monte Carlo模拟,其中的Matlab脚本大致如下所示:在Matlab/Simulink中增加montecarlo模拟的模拟时间,matlab,simulink,Matlab,Simulink,我正在为Simulink模型运行Monte Carlo模拟,其中的Matlab脚本大致如下所示: model = 'modelName'; load_system(model) for ii = 1 : numberOfMC % Some set_param... % Some values are set sim(model); results{ii, 1} = numberOfMC; % ect... end close_system(model
model = 'modelName';
load_system(model)
for ii = 1 : numberOfMC
% Some set_param...
% Some values are set
sim(model);
results{ii, 1} = numberOfMC;
% ect...
end
close_system(model,0);
随着蒙特卡罗试验次数的增加,一次模拟的时间也会增加,就像n^2一样
有没有一个简单的解释,有没有一个解决办法,使一些线性的时间
谢谢大家!
编辑:
当我将我的模拟分成6个批次,并将它们串联运行时,模拟时间的总和远远小于我一次运行整个模拟的时间。由于没有提问者的反馈,人们可以做的事情似乎是有限的,因此我将发表我的评论作为回答:
我打赌是内存问题,如果您想消除此问题,请查看如果不首先存储结果,问题是否仍然存在,只需删除此行:
results{ii, 1} = numberOfMC;
还要确认您没有其他增长变量,或者您无意中使输入变得更复杂。这可能不相关,如果按相反的顺序进行所有模拟,时间是否也会像这样增加?或者,如果您执行了全部迭代,但每次都使用完全相同的输入?是否预先分配
结果
?也许它是动态增长的,这需要时间。你真的使用results{ii,1}=numberOfMC
?那条线的目的是什么numberOfMC
似乎是一个君士坦丁,我也非常有兴趣知道这类问题的答案(将“sim(模型)”放在循环中,在循环之前加载的内存问题)是否存在使系统僵硬的参数更改,因此解算器出现问题?模型在循环中每次执行多少时间步?我打赌是内存问题,如果你想消除这个问题,看看如果不首先存储结果,问题是否仍然发生,只需删除这行:results{ii,1}=numberOfMC代码>。还要确认您没有其他增长变量,或者您无意中使输入变得更复杂。这可能不相关,如果按相反的顺序进行所有模拟,时间是否也会像这样增加?或者,如果您进行了全部迭代,但每次都使用完全相同的输入?