-1

誰でも私に説明できますか、なぜ次のエラーuが発生するのかh

max_X = 100;
max_Y = 100;
h = ones(max_Y,max_X);
u = zeros(max_Y,max_X);

parfor l=1:max_X*max_Y
i = mod(l-1,max_X) + 1;
j = floor((l-1)/max_Y) + 1;
  for k=1:9
    m = i + floor((k-1)/3) - 1; 
    n = j + mod(k,-3) + 1;
    h_average(k) = sqrt(h(i,j)*h(m,n));
    u_average(k) = (u(i,j)*sqrt(h(i,j)) + u(m,n)*sqrt(h(m,n)))/(sqrt(h(i,j)) + sqrt(h(m,n)));
  end
end

で代用できるようになり(i,j)まし(l)たが、関連する変数を計算しようとしてもp、 に従って と呼び、代わりに(m,n)と書くとエラー メッセージが表示されます。、それぞれに下線を引くだけです。ではありません。MATLAB は次のように述べています。u(p)u(m,n)u(m,n)u(p)h(m,n)

説明: MATLAB がparforループを効率的に実行するには、MATLAB ワーカーに送信されるデータの量を最小限にする必要があります。parforMATLAB がこれを実現する方法の 1 つは、反復で変数にインデックスを付ける方法を制限することです。示された変数は、 と互換性のない方法で索引付けされていますparfor。推奨処置 インデックス作成を修正します。インデックス付けの制限の説明については、Parallel Computing Toolbox ドキュメンテーションの「スライス変数」を参照してください。

ここで何が問題なのですか?

4

1 に答える 1

2

との問題はuh両方ともブロードキャスト変数として PARFOR ループに送信されることです。これはエラーではありません。必要以上のデータが送信されていることを示す単なる警告です。

PARFOR ループを実行できません。これは、インデックスを作成しているが、 and をスライスu_averageしていないためですh_average。毎回上書きu_averageしているため、このループからどのような出力が必要かは明確ではありません。したがって、PARFOR ループは無意味です。h_average

于 2013-11-01T13:34:13.063 に答える