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.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> Elementary Functions > elementarymatrices > 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個の場合は行列, それ以外の場合はハイパー行列

説明

この関数はユーティリティルーチンで, 2, 3, ..., n次元のグリッド上で関数の評価を行う ための配列を作成する際に便利です. 例えば, 2次元の場合, グリッドは 長さ nx および nyの 2つのベクトル x および y で定義され, i=1,..,nx および j=1,..,ny として,座標(x(i),y(j))となります. そのグリッド上で (例えばfのような)関数の評価を 行うことになります. この場合,この関数は,以下のような大きさnx x nyの 2つの行列X,Yを計算します :

X(i,j) = x(i)   for all i in [1,nx]
Y(i,j) = y(j)       and j in [1,ny]

評価は,Z=f(X,Y)で行うことができます. (ベクトル引数でfを評価するようコードが 作成されている場合, *, / および ^の部分に 要素毎の演算 .*, ./ および .^を使用することにより,(一般に)動作します..

3次元の場合, 長さ nx, ny および nzの3個のベクトルx,y,z を指定し, X,Y,Zは以下のように大きさ nx x ny x nzのハイパー行列となります :

X(i,j,k) = x(i)  
Y(i,j,k) = y(j)   for all (i,j,k) in [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)   
for all (i1,i2,...,im) in [1,nx1]x[1,nx2]x...x[1,nxm]

// 簡単な2次元グリッドを作
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=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]); xselect()
// 簡単な3次元グリッドを作成
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);

// 3次元グリッドを表示する ...
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()

参照

  • kron — クロネッカー積 (.*.)
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Oct 01 17:40:23 CEST 2012