このループのベクトル化には、多くの情報が欠落しています。ラインだけ見てください
out_angle = out_angle - sigma*lut(j);
ベクトル化後、次のような式が必要です
out_angle(j) = out_angle(j-1) - sigma*lut(j);
out_angle
電流が以前に計算された値に依存することがすぐにわかります。これは、 を明示的に表現できる場合を除いてout_angle
、 を逐次的にしか計算できないことも意味します。out_angle
out_angle(j) = out_angle(j-1) - sigma*lut(j)
= out_angle(j-2) - sigma*lut(j-1) - sigma*lut(j)
= out_angle(j-3) - sigma*lut(j-2) - sigma*lut(j-1) - sigma*lut(j)
= ...
= out_angle(0) - sum_{k = 0}^j (sigma*lut(k))
sigma
にも依存するため、物事はより複雑になりj
ます。つまり、実際にはあなたが持っ
sigma(j)
ているので
out_angle(j) = out_angle(0) - sum_{k = 0}^j (sigma(k)*lut(k))
sigma
残念ながら、同じ方法で解決しなければならない暗黙的な式しかありません。の背後にある構造について少し考えることができますsigma
。これは変数で、1y
は負、-1y
は正またはゼロです。つまり、次のようなものです。
sigma = -mySign(y)
whereは関数mySign
のようにsign
機能しますが、引数がゼロの場合は 1 を返します。
の明示的な表現が見つかった場合は、それを上記sigma
の明示的な表現に挿入できますout_angle
。その後、(ほとんどの場合) コードをベクトル化できます。