当以下行作为 parfor 循环的一部分执行时,即使 G 矩阵是病态的,它也会执行。
betas = G\data.y2.';
但是,当我尝试将其作为常规 for 循环的一部分运行时,代码会停止执行,并报告 Matrix 是单数的。
为什么 for 和 parfor 循环处理它的方式不同?
我问的原因是我正在调试其他人编写的一些代码。我无法调试 parfor,所以我希望通过查看 for 等价物来了解发生了什么。
有没有一种方法可以调试并行代码,我可以期望代码的行为与并行环境中的行为相同?
还有什么data.y2.
;意思是相对于data.y2'
;
此外,我有一个旧版本的代码,旨在纯粹在常规 for 循环中运行。
当我回去运行时,我得到了停止代码运行的相同错误。
但是,当我重新启动 MATLAB 并再次运行它时,它运行没有问题。它只是将奇异矩阵的反转结果变为NaN
并继续(这就是我想要的)。
在并行版本中,进行了以下声明:
warnState(1) = warning('error', 'MATLAB:singularMatrix');
warnState(2) = warning('error', 'MATLAB:illConditionedMatrix');
这些是导致代码停止的原因吗?如果是这样,为什么它们不影响并行版本?