Используйте parsim
.
Вы можете использовать load_system
вместо open_system
, чтобы избежать открытия Simulink.Вы, вероятно, должны вызывать его только один раз, перед циклом for, а не на каждой итерации.
Если это все еще занимает слишком много времени, попробуйте больший размер шага (или переменную, определяемую решателем ode) или больший размер шага в изменяющихся параметрах.
Пример использования parsim:
% load model
mdl_name='Gains';
load_system(mdl_name);
% parameter to simulate
K1 = 1:2;
K2 = 1:2;
K3 = 0.1:0.1:2;
% create matrix with all combinations
[k1, k2, k3] = ndgrid(K1, K2, K3);
Gains = [k1(:), k2(:), k3(:)];
% Create an array of SimulationInput objects and specify the sweep value for each simulation
numSims = size(Gains,1);
simIn(1:numSims) = Simulink.SimulationInput(model);
% setup models
for idx = 1:numSims
% get Gains
K1 = Gains(idx,1);
K2 = Gains(idx,2);
K3 = Gains(idx,3);
% set Gains
simIn(idx) = simIn(idx).setBlockParameter([mdl_name,'/Tfn'],'Numerator',mat2str(50),'Denominator',mat2str([20]));
simIn(idx) = simIn(idx).setBlockParameter([mdl_name,'/K1'],'Gain',mat2str(K1));
simIn(idx) = simIn(idx).setBlockParameter([mdl_name,'/K2'],'Gain',mat2str(K2));
simIn(idx) = simIn(idx).setBlockParameter([mdl_name,'/K3'],'Gain',mat2str(K3));
% set simulation parameters
simIn(idx) = simIn(idx).setModelParameter('StartTime','40', 'StopTime','85','FixedStep',num2str(dt));
end
% Simulate the model
simOut = parsim(simIn);