How can I pass 2-D meshgridded var into a 3-D matrix?

1 visualización (últimos 30 días)
I need to pass X and Y which are 2-D meshgridded matrices into c the 3-D matrix. where k is a constant and zv is a vector.
Here is my try:
for i = 1:M
c(:,:,i)=exp(1j*k/(2*zv(i))*(X2.^2+Y2.^2));
end
Thanks.
  4 comentarios
Steven Lord
Steven Lord el 21 de Jul. de 2017
Show us the sizes of all of X2, Y2, c, and zv as well as the value of M as they are immediately before you enter the loop.
Ezz El-din Abdullah
Ezz El-din Abdullah el 21 de Jul. de 2017
M is 250
X2 is 250x250
Y2 is 250x250
c is not defined before the loop but I want it to be 3D matrix (250x250x250)

Iniciar sesión para comentar.

Respuesta aceptada

Guillaume
Guillaume el 21 de Jul. de 2017
Editada: Guillaume el 21 de Jul. de 2017
Step 1: permute your vector so that it is along the 3rd dimension:
zv = permute(zv, [3 2 1]); %if zv is a column vector (M x 1)
%or
zv = permute(zv, [1 3 2]); %if zv is a row vector (1 x M)
Step 2: No need for loop, use memberwise operation + implicit expansion (if on R2016b or later):
c = exp(1j*k./(2*zv)) .* (X2.^2 + Y2.^2));
If on version < R2016b:
c = bsxfun(@times, exp(1j*k./(2*zv)), (X2.^2 + Y2.^2));
  6 comentarios
Guillaume
Guillaume el 21 de Jul. de 2017
As I wrote,
If on version < R2016b:
c = bsxfun(@times, exp(1j*k./(2*zv)), (X2.^2 + Y2.^2)); %after the permute
Ezz El-din Abdullah
Ezz El-din Abdullah el 21 de Jul. de 2017
Thank you very much.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by