Arrays para avaliação de função multidimensional em grid
[X, Y] = ndgrid(x,y) [X, Y, Z] = ndgrid(x,y,z) [X, Y, Z, T] = ndgrid(x,y,z,t) [X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm)
vetores
matrizes, no caso de 2 argumentos de entrada, ou hipermatrizes em outro caso
Esta rotina utilitária é útil para criar arrays para a avaliação da
função em grids 2, 3, ..., n dimensionais. Por exemplo, em 2d, um grid é
definido por dois vetores, x e y de
comprimento nx e ny, e se deseja avaliar uma função (dita f) em todos os
pontos do grid, isto é, em todos os pontos de coordenadas (x(i),y(j)) com
i=1,..,nx e j=1,..,ny . Neste caso, esta função pode computar as duas
matrizes X,Y de tamanho nx x ny tais que :
e a avaliação pode ser feita com Z=f(X,Y) (sob a
condição de que f foi codificada para a avaliação em
argumentos de vetor, que é feito (em geral) usando os operadores elemento
a elemento .*, ./ and
.^ no lugar de *,
/ e ^).
No caso 3d, considerando 3 vetores x,y,z de
comprimentos nx, ny e nz, X,Y,Z são 3 hipermatrizes de
tamanho nx x ny x nz tais que :
No caso geral de m argumentos de entrada x1, x2, ..,
xm
,os m argumentos de saída X1, X2, .., Xm
são hipermatrizes de tamanho nx1 x nx2 x ... x nxm e
:
// criando um grid 2d simples nx = 40; ny = 40; x = linspace(-1,1,nx); y = linspace(-1,1,ny); [X,Y] = ndgrid(x,y); // computando uma função no grid e plotando //deff("z=f(x,y)","z=128*x.^2 .*(1-x).^2 .*y.^2 .*(1-y).^2"); deff("z=f(x,y)","z=x.^2 + y.^3") Z = f(X,Y); clf() plot3d(x,y,Z, flag=[2 6 4]); show_window() | ![]() | ![]() |
// criando um grid 3d simples nx = 10; ny = 6; nz = 4; x = linspace(0,2,nx); y = linspace(0,1,ny); z = linspace(0,0.5,nz); [X,Y,Z] = ndgrid(x,y,z); // tente exibir este grid 3d... XF=[]; YF=[]; ZF=[]; for k=1:nz [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k)); XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; end for j=1:ny [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),... matrix(Y(:,j,:),[nx,nz]),... matrix(Z(:,j,:),[nx,nz])); XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; end clf() plot3d(XF,YF,ZF, flag=[0 6 3], leg="X@Y@Z") xtitle("A 3d grid !"); show_window() | ![]() | ![]() |
