0

私はMatlabが初めてです。parfor ループを使用して、非常に時間のかかるタスクを実行します。以下のスニペットを参照してください。ただし、Matlab からエラー情報を取得しました。誰でも助けることができますか?parfor に関するドキュメントを読みましたが、何をすべきかわかりません...

ありがとうございました。

The parfor loop cannot run due to the way variable "M" is used

The parfor loop cannot run due to the way variable "T" is used


Explanation 
MATLAB runs loops in parfor functions by dividing the loop iterations into groups, and then sending them to MATLAB workers where they run in parallel. For MATLAB to do this in a repeatable, reliable manner, it must be able to classify all the variables used in the loop. The code uses the indicated variable in a way that is incompatible with classification.




 parfor i=1:size(x,1)

    if (ind(index(i)) == Index1)
        para=lsqcurvefit(F, [M(index(i)) T(index(i))], t, SS(ind(index(i)):end,i), [0 0], [MaxiM(index(i)) maxT],options);
    elseif  (ind(index(i)) == Index2) 
        para=lsqcurvefit(F, [M(index(i)) T(index(i))], t2, SS(ind(index(i)):end,i), [0 0], [MaxiM(index(i)) maxT],options);
    end

end
4

1 に答える 1

1

それらを並列ループで使用するには、再編成する必要がMあります。Tこれは機能するはずです:

M = M(index);
T = T(index);
parfor i=1:size(x,1)
    if (ind(index(i)) == Index1)
        para = lsqcurvefit(F, [M(i) T(i)], t, SS(ind(index(i)):end,i), ...
                           [0 0], [MaxiM(index(i)) maxT], options);
    elseif (ind(index(i)) == Index2) 
        para = lsqcurvefit(F, [M(i) T(i)], t2, SS(ind(index(i)):end,i), ...
                           [0 0], [MaxiM(index(i)) maxT], options);
    end
end

ただし、関数を返す必要がある場合は、コードが無意味であるというKleistlsqcurvefitのコメントに同意します。

アップデート:

同様の再配置を試みて、パフォーマンスをさらに向上させることができます。

M = M(index);
T = T(index);
ind = ind(index);
MaxiM = MaxiM(index);
parfor i=1:size(x,1)
    if (ind(i) == Index1)
        para = lsqcurvefit(F, [M(i) T(i)], t, SS(ind(i):end,i), ...
                           [0 0], [MaxiM(i) maxT], options);
    elseif (ind(i) == Index2) 
        para = lsqcurvefit(F, [M(i) T(i)], t2, SS(ind(i):end,i), ...
                           [0 0], [MaxiM(i) maxT], options);
    end
end
于 2013-02-16T17:13:43.150 に答える