并行包中的Mldivide

时间:2013-04-09 19:06:44

标签: matlab

当以下行作为parfor循环的一部分执行时,即使G矩阵病态,它也会执行。

betas = G\data.y2.';

然而,当我尝试将其作为常规for循环的一部分运行时,代码停止执行并报告Matrix是单数。

为什么for和parfor循环以不同方式处理它?<​​/ p>

我问的原因是我正在调试其他人写的代码。我无法调试parfor所以我希望通过查看等效的内容来了解​​发生了什么。

有没有办法可以调试并行代码,我可以期望代码的行为与在并行环境中的行为相同?

data.y2.也是如此;意思是与data.y2'相对;

此外,我有一个较旧版本的代码,旨在纯粹在常规for循环中运行。

当我回去运行时,我遇到了阻止代码运行的相同错误。

然而,当我重新启动MATLAB并再次运行它时没有问题。它只是将奇异矩阵的反转结果变为NaN并继续(这就是我想要的)。

在并行版本中,发出以下声明:

warnState(1) = warning('error', 'MATLAB:singularMatrix'); 
warnState(2) = warning('error', 'MATLAB:illConditionedMatrix'); 

这些是导致代码停止的原因吗? 如果是这样,他们为什么不影响并行版本?

1 个答案:

答案 0 :(得分:1)

常规桌面MATLAB和Parallel Computing Toolbox工作者之间的一个区别是桌面MATLAB运行多线程,工作程序以单计算线程模式运行。我相信这可能会导致一些轻微的数字差异。您可以尝试使用

启动桌面MATLAB
matlab -singleCompThread

查看常规MATLAB是否可以表现出相同的行为。

在MATLAB中,.'运算符为TRANSPOSE'CTRANSPOSE - 复共轭转置。