Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

gradient

シンボリックなスカラー場の勾配ベクトル

説明

g = gradient(f,v) は、直交座標のベクトル v について、シンボリックなスカラー場 f勾配ベクトルを返します。

g = gradient(f) は、スカラー場 f のシンボリック変数から作成された既定のベクトルについて、f の勾配ベクトルを返します。

すべて折りたたむ

ベクトル v に対するスカラー関数 f の勾配は、v の各要素に対する f の 1 次偏導関数のベクトルです。

ベクトル [x,y,z] について f(x,y,z) の勾配ベクトルを求めます。勾配は、以下の成分をもつベクトルとなります。

syms x y z
f(x,y,z) = 2*y*z*sin(x) + 3*x*sin(z)*cos(y);
v = [x,y,z];
gradient(f,v)
ans(x, y, z) = 

(3cos(y)sin(z)+2yzcos(x)2zsin(x)-3xsin(y)sin(z)2ysin(x)+3xcos(y)cos(z))

関数 f(x,y) の勾配を求め、矢印 (速度) 表示でプロットします。

ベクトル [x,y] について f(x,y) の勾配ベクトルを求めます。勾配は、以下の成分をもつベクトル g となります。

syms x y
f = -(sin(x) + sin(y))^2;
v = [x y];
g = gradient(f,v)
g = 

(-2cos(x)sin(x)+sin(y)-2cos(y)sin(x)+sin(y))

ここで、これらの成分によって定義されるベクトル場をプロットします。MATLAB® には、このタスクのためにプロット関数quiverが用意されています。この関数ではシンボリック引数は受け入れられません。まず、g の成分の式にあるシンボリック変数を数値で置き換えます。次に quiver を使用します。

[X,Y] = meshgrid(-1:.1:1,-1:.1:1);
G1 = subs(g(1),v,{X,Y});
G2 = subs(g(2),v,{X,Y});
quiver(X,Y,G1,G2)

Figure contains an axes object. The axes object contains an object of type quiver.

R2021b 以降

シンボリック行列変数を使用して、スカラーを返す行列乗算を定義します。

syms X Y [3 1] matrix
A = Y.'*X
A = YTX

X についての行列乗算の勾配を求めます。

gX = gradient(A,X)
gX = Y

Y についての行列乗算の勾配を求めます。

gY = gradient(A,Y)
gY = X

R2021b 以降

次の多変数関数の勾配を求めます。

f(x)=sin2(x1,1)+sin2(x1,2)+sin2(x1,3)

これを、ベクトル x=[x1,1,x1,2,x1,3] について行います。

シンボリック行列変数を使用して、関数 f とその勾配を、ベクトル x で表現します。

syms x [1 3] matrix
f = sin(x)*sin(x).'
f = sin(x)sin(x)T
g = gradient(f,x)
g = 2cos(x)I3sin(x)T

x の要素で勾配を表現するには、symmatrix2sym を使用して、結果をシンボリック スカラー変数のベクトルに変換します。

g = symmatrix2sym(g)
g = 

(2cos(x1,1)sin(x1,1)2cos(x1,2)sin(x1,2)2cos(x1,3)sin(x1,3))

また、fx をスカラー変数のシンボリック式に変換して、関数 gradient の入力として使用することもできます。

g = gradient(symmatrix2sym(f),symmatrix2sym(x))
g = 

(2cos(x1,1)sin(x1,1)2cos(x1,2)sin(x1,2)2cos(x1,3)sin(x1,3))

R2023a 以降

シンボリック行列変数 X として 3 行 1 列のベクトルを作成します。X の既存の定義を維持したまま、X の関数であるスカラー場をシンボリック行列関数 A(X) として作成します。

syms X [3 1] matrix
syms A(X) [1 1] matrix keepargs

X について A(X) の勾配を求めます。関数 gradient は未評価の式を返します。

gradA = gradient(A,X)
gradA(X) = X A(X)

A(X) の勾配の発散が A(X) のラプラシアン、つまり XXA(X)=ΔXA(X) に等しいことを示します。

divOfGradA = divergence(gradA,X)
divOfGradA(X) = ΔX A(X)
lapA = laplacian(A,X)
lapA(X) = ΔX A(X)

A(X) の勾配の回転がゼロ、つまり X× XA(X)=03,1 であることを示します。

curlOfGradA = curl(gradA,X)
curlOfGradA(X) = 03,1

入力引数

すべて折りたたむ

シンボリックなスカラー場。シンボリック式、シンボリック関数、シンボリック行列変数、またはシンボリック行列関数として指定します。

  • f がシンボリック スカラー変数の関数であり、fsym 型または symfun 型である場合、ベクトル vsym 型または symfun 型でなければならない。

  • f がシンボリック行列変数の関数であり、fsymmatrix 型または symfunmatrix 型である場合、ベクトル vsymmatrix 型または symfunmatrix 型でなければならない。

データ型: sym | symfun | symmatrix | symfunmatrix

勾配を求める対象のベクトル。シンボリック スカラー変数、シンボリック関数、シンボリック行列変数、またはシンボリック行列関数のベクトルとして指定します。

  • v を指定せず、f がシンボリック スカラー変数の関数である場合、既定では、gradientsymvar(f) で定義された変数の順序で、f のシンボリック スカラー変数からベクトル v を構成する。

  • vsymmatrix 型のシンボリック行列変数である場合、v1N 列または N1 列のサイズでなければならない。

  • v がスカラーの場合、gradient(f,v) = diff(f,v) となる。

  • vsym([]) のような空のシンボリック オブジェクトの場合、gradient は、空のシンボリック オブジェクトを返します。

データ型: sym | symfun | symmatrix | symfunmatrix

制限

  • 関数 gradient はテンソル微分をサポートしません。勾配がベクトルではなくテンソル場または行列である場合、関数 gradient はエラーを返します。

  • 現在、Symbolic Math Toolbox™ は、シンボリック行列変数の関数 dot または関数 cross と、symmatrix 型および symfunmatrix 型の関数をサポートしていません。ベクトル微積分の恒等式がドット積またはクロス積を含む場合、ツールボックスは代わりに他のサポートされている関数でそれらの恒等式を表示します。シンボリック行列の変数と関数をサポートするすべての関数のリストを表示するには、コマンド methods symmatrixmethods symfunmatrix を使用します。

詳細

すべて折りたたむ

勾配ベクトル

ベクトル x=(x1,x2,,xn) に対する f(x) の勾配ベクトルは、f の 1 次偏導関数のベクトルです。

xf(x)=(fx1,fx2,,fxn)

バージョン履歴

R2011b で導入

すべて展開する