Команда 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петля в документации .

Другие вопросы по тегам