Команда Matlab Sim в Parfor
Я хотел бы запустить модель Simulink в parfor
Цикл на многих ядрах с разными данными. Однако я не мог получить sim
результаты, когда я использую parfor
тогда как я могу получить их, используя только цикл.
Это просто получить [t,u]
от workspace1
рассмотрим передаточную функцию n{1}/d{1}
а затем рассчитывает EqFracInt
в workspace2
,
Проблемная часть моего кода
...
parfor ieq=1:1
assignin('base','t',t);
assignin('base','u',u);
assignin('base','n',n);
assignin('base','d',d);
assignin('base','T_end',T_end);
[simout] = sim('RespSpecFrac', [0 T_end], simset('ReturnWorkspaceOutputs','on'));
PGRs = simout.get('EqFracInt');
end
Я не мог получить PGRs
ценности. Не могли бы вы объяснить мне ошибку и как ее решить?
1 ответ
Причина, по которой вы не можете получить значения, заключается в том, что это временная переменная. Поскольку в цикле каждая итерация независима, любая переменная, назначенная непосредственно внутри цикла без индексации, используется только в этой конкретной итерации и уничтожается. Для того, чтобы получить нужные значения, вам нужно преобразоватьPGRs
либо в нарезанной переменной (путем ее индексации), либо в переменной сокращения (путем, например, ее конкатенации). Попробуйте изменить последнюю строку вашего цикла, следуя одному из следующих примеров:
PGRs(ieq, :) = simout.get('EqFracInt'); % sliced variable
или
PGRs = [PGRs; simout.get('EqFracInt')]; % reduction variable
Конкретная реализация будет зависеть от формы ожидаемых результатов.EqFracInt
, конечно. Вы можете узнать больше о типах переменных внутриparfor
петля в документации .