0

次の行が parfor ループの一部として実行されると、G 行列が悪条件であっても実行されます。

betas = G\data.y2.';

ただし、通常の for ループの一部として実行しようとすると、コードの実行が停止し、マトリックスが特異であると報告されます。

for ループと parfor ループの処理が異なるのはなぜですか?

私が尋ねる理由は、他の誰かが書いたコードをデバッグしているためです。私は parfor をデバッグできないので、同等の for を見て何が起こっているのかを知りたいと思っていました。

コードが並列環境と同じように動作することを期待できる並列コードをデバッグする方法はありますか?

また、何をしますかdata.y2.; とは対照的に意味しdata.y2'ます。

さらに、純粋に通常の for ループで実行するように設計された古いバージョンのコードがあります。

実行に戻ったとき、コードの実行を停止したのと同じエラーが発生しました。

しかし、MATLAB を再起動して再度実行したところ、問題なく実行されました。特異行列を反転した結果を取り、NaN継続します(これが私が望んでいることです)。

並列バージョンでは、次の宣言が行われます。

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

これらはコードが停止する原因ですか? もしそうなら、なぜそれらはパラレルバージョンに影響を与えていないのですか?

4

1 に答える 1