ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

構文

FX = gradient(F)
[FX,FY] = gradient(F)
[FX,FY,FZ,...] = gradient(F)
[...] = gradient(F,h)
[...] = gradient(F,h1,h2,...)

定義

2 変数の関数 F(x,y) の "勾配" は、次のように定義されます。

F=Fxi^+Fyj^

これは、F の値が増加する方向を示すベクトルの集合として考えることができます。MATLAB® ソフトウェアでは、任意の数の変数をもつ関数に対して数値勾配 (差分) を計算できます。N 変数の関数 F(x,y,z, ...) の場合、次のようになります。

F=Fxi^+Fyj^+Fzk^+...

説明

FX = gradient(F) は、F がベクトルの場合、F の 1 次元数値勾配を返します。FX は x (水平) 方向の差分 ∂F/∂x に対応します。

[FX,FY] = gradient(F) は、F が行列の場合、2 次元数値勾配の y 成分と x 成分を返します。FX は x (水平) 方向の差分 ∂F/∂x に対応します。FY は y (垂直) 方向の差分 ∂F/∂y に対応します。各方向の点の間隔を 1 と仮定します。

[FX,FY,FZ,...] = gradient(F) は、FN 次元をもつ場合、F の勾配の N 成分を返します。F 内の値の間隔を制御するには、2 つの方法があります。

  • 単一の間隔値 h ですべての方向の点間隔を指定します。

  • N 個の間隔値 (h1,h2,...) で F の各次元に対する間隔を指定します。スカラーの間隔パラメーターは、各次元に対する一定間隔を指定します。ベクトル パラメーターは、F の対応する次元に沿った値の座標を指定します。この場合、ベクトルの長さは、対応する次元のサイズに一致しなければなりません。

    メモ:   最初の出力 FX は常に、F の 2 番目の次元に沿った勾配であり、列を横切ります。2 番目の出力 FY は常に、F の最初の次元に沿った勾配であり、行を横切ります。3 番目の出力 FZ およびそれ以降の出力においては、N 番目の出力は F の N 番目の次元に沿った勾配になります。

[...] = gradient(F,h) は、h がスカラーの場合、各方向での点間隔として h を使用します。

[...] = gradient(F,h1,h2,...) は、N 個の間隔パラメーターを使い F の各次元に対する間隔を指定します。

ベクトル場の等高線図

グリッドで $x e^{-x^2-y^2}$ の 2 次元勾配を計算します。

v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.2);

同じ Figure に等高線とベクトルをプロットします。

contour(v,v,z)
hold on
quiver(v,v,px,py)
hold off

ポイントの次元間隔の指定

3 次元配列を作成します。

F(:,:,1) = magic(3); 
F(:,:,2) = pascal(3);

コマンド

gradient(F)

は、dx = dy = dz = 1 を取ります。しかし、コマンド

[PX,PY,PZ] = gradient(F,0.2,0.1,0.2) 

は、dx = 0.2dy = 0.1、および dz = 0.2 を取ります。

詳細

すべて折りたたむ

アルゴリズム

gradient は内部データ点間の "中央差分" を計算します。たとえば、単位間隔のデータをもち、水平方向の勾配が G = gradient(A) である行列 A を考えます。内部勾配値 G(:,j) は次の式で表されます。

G(:,j) = 0.5*(A(:,j+1) - A(:,j-1));

ここで、j2 から N-1 まで変化します。Nsize(A,2) です。

行列の端の勾配値は "片側差分" を使用して計算され、次の式で表されます。

G(:,1) = A(:,2) - A(:,1);
G(:,N) = A(:,N) - A(:,N-1);

点の間隔を指定した場合、差分は適切にスケーリングされます。出力を 2 つ以上指定した場合、gradient は他の次元に沿った差分も同様に計算します。関数 diff とは異なり、gradient 入力と同じ数の要素を含む配列を返します。

参考

|

R2006a より前に導入

この情報は役に立ちましたか?