Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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 — произведение Кронекера (.*.)
Report an issue | ||
<< meshgrid | Элементарные матрицы | ones >> |