How do I replace "for" loops by matrix multiplication? I am getting confused because of 4 "for" loops. Any suggestions?

1 回表示 (過去 30 日間)
Hello, the code is as follows.
value = zeros();
E2 = zeros();
dxdy = 1;
x1=1;y1=1;u1=1;v1=1;
for u = -1:1:1
for v = -1:1:1
for x = -1:1:1
for y = -1:1:1
value(x1,y1) = input_data(x1,y1)*exp( ( -1i*k*(((u-x)^2) + (v-y)^2)) / (2*0.2))*(dxdy);
y1 = y1+1;
end
x1 = x1+1;
y1 = 1;
end
S_rows = sum(value,2); %Adding components of matrix "value"
S_complete = sum(S_rows);
E2(u1,v1) = S_complete;
x1 = 1;
v1 = v1 + 1;
end
u1 = u1+1;
v1 = 1;
end
disp(E2)
  4 件のコメント
Torsten
Torsten 2018 年 10 月 11 日
"input_data" must be 27x3, not 3x3.
Dhananjay Mishra
Dhananjay Mishra 2018 年 10 月 12 日
If you see the program the values of u1 and v1 is reset everytime. Hence the input is 3*3. And the output is also 3*3

サインインしてコメントする。

回答 (1 件)

Miriam
Miriam 2018 年 10 月 12 日
編集済み: Miriam 2018 年 10 月 12 日
dxdy = 1;
[x,y,u,v] = ndgrid(-1:1);
value = input_data.*exp((-1i*k*(((u-x).^2) + (v-y).^2))/(2*0.2))*(dxdy);
S_rows = sum(value,2);
S_complete = sum(S_rows);
E2 = squeeze(S_complete);
disp(E2)
  8 件のコメント
Dhananjay Mishra
Dhananjay Mishra 2018 年 10 月 12 日
Now I don't get any error but the answer doesn't matches for both the codes.
Miriam
Miriam 2018 年 10 月 12 日
I'm not sure what to tell you then. It works fine for me.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by