Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Справка Scilab >> Основные функции > Элементарные матрицы > ndgrid

ndgrid

массивы для многомерного вычисления функций по координатной сетке

Последовательность вызова

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)

Аргументы

x, y, z, ...

векторы

X, Y, Z, ...

в случае двух входных аргументов - матрицы, в противном случае - гиперматрицы

Описание

Эта служебная программа полезна для создания массивов для вычисления функций по 2-х, 3-х, ... , n-мерной координатной сетке. Например, в двухмерная координатная сетка определяется двумя векторами, x и y длиной nx и ny и вы хотите вычислить функцию (скажем, f) во всех точках координатной сетки, то есть во всех точках с координатами (x(i),y(j)), где i=1,..,nx и j=1,..,ny. В этом случае данная функция может вычислить две матрицы X,Y размером nx x ny такие, что:

 
X(i,j) = x(i)  для всех i в [1,nx]
Y(i,j) = y(j)         и j в [1,ny]
 

и вычисление может быть сделано с Z=f(X,Y) (при условии, что вы написали код функции f для работы с векторными аргументами, что делается (вообще) с помощью поэлементных операторов .*, ./ и .^ вместо *, / и ^).

В трёхмерном случае, рассматриваются три вектора x, y, z длиной nx, ny и nz. X, Y, Z являются тремя гиперматрицами размерами nx x ny x nz такими, что:

 
X(i,j,k) = x(i)  
Y(i,j,k) = y(j)   для всех (i,j,k) в [1,nx] x [1,ny] x [1,nz]
Z(i,j,k) = z(k)
 

В общем случае m входных аргументов x1, x2, ... , xm, тогда m выходных аргументов X1, X2, ... , Xm являются гиперматрицами размерами nx1 x nx2 x ... x nxm и:

 
Xj(i1,i2,...,ij,...,im) = xj(ij)   
для всех (i1,i2,...,im) в [1,nx1] x [1,nx2] x ... x [1,nxm]  
 

Примеры

// создание простой двухмерной координатной сетки
nx = 40; ny = 40;
x = linspace(-1,1,nx);
y = linspace(-1,1,ny);
[X,Y] = ndgrid(x,y);
 
// вычисление функции в координатной сетке и построение её на графике
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()
// создание простой трёхмерной координатной сетки
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);
 
// попытаемся отобразить эту трёхмерную координатную сетку ...
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("Трёхмерная сетка!"); show_window()

Смотрите также

  • kron — произведение Кронекера (.*.)
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 14:01:04 CEST 2014