我想在parfor
循环中使用不同的数据在多个内核上运行Simulink模型。但是,当我使用parfor
时,我无法获得sim
结果,而当我仅使用for循环时,我可以获得这些结果。
它简单地从workspace1
得到[t,u]
,考虑一个传递函数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条答案
按热度按时间cmssoen21#
你不能得到
PGRs
值的原因是它是一个临时变量。因为在parfor
循环中,每次迭代都是独立的,任何在循环中直接赋值的没有索引的变量都只在那个特定的迭代中使用并被销毁。为了得到所需的值,你需要将PGRs
转换为分片变量(通过索引)或在reduction变量中(例如,通过连接)。尝试按照以下示例之一修改循环的最后一行:或
当然,具体的实现将取决于预期输出
EqFracInt
的形式。你可以在文档中看到更多关于parfor
循环中变量类型的信息。