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

3 次查看(过去 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 个评论
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 个评论

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Particle & Nuclear Physics 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by