メインコンテンツ

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

diff

シンボリック式または関数の微分

説明

Df = diff(f) は、f の定義内のシンボリック スカラー変数について f を微分します。微分変数は symvar(f,1) によって決まります。

Df = diff(f,n) は、symvar によって決まるシンボリック スカラー変数について fn 次導関数を計算します。

Df = diff(f,var) は、微分パラメーター var について f を微分します。var は、x などのシンボリック スカラー変数、f(x) などのシンボリック関数、または diff(f(t),t) などの導関数になります。

Df = diff(f,var,n) は、var について fn 次導関数を計算します。

Df = diff(f,var1,...,varN) は、パラメーター var1,...,varN について f を微分します。

Df = diff(f,mvar) は、シンボリック行列変数またはシンボリック行列関数について f を微分します。

すべて折りたたむ

関数 f(x) = sin(x^2) の導関数を求めます。

syms f(x)
f(x) = sin(x^2);
Df = diff(f,x)
Df(x) = 2xcos(x2)

x = 2 での導関数の値を求めます。値を double に変換します。

Df2 = Df(2)
Df2 = 4cos(4)
double(Df2)
ans = 
-2.6146

sin(x*t^2) の 1 次導関数を求めます。

syms x t
Df = diff(sin(x*t^2))
Df = t2cos(t2x)

微分変数を指定していないため、diff では symvar によって決まる既定の変数が使用されます。この式では、既定の変数は x です。

var = symvar(sin(x*t^2),1)
var = x

続いて、変数 t についてこの式の導関数を求めます。

Df = diff(sin(x*t^2),t)
Df = 2txcos(t2x)

t6 の 4 次、5 次、および 6 次導関数を求めます。

syms t
D4 = diff(t^6,4)
D4 = 360t2
D5 = diff(t^6,5)
D5 = 720t
D6 = diff(t^6,6)
D6 = 720

変数 y について、式 x*cos(x*y) の 2 次導関数を求めます。

syms x y
Df = diff(x*cos(x*y),y,2)
Df = -x3cos(xy)

x*y の 2 次導関数を求めます。微分変数を指定しない場合、diffsymvar によって決定される変数を使用します。symvar(x*y,1)x を返すため、diffx について x*y の 2 次導関数を計算します。

syms x y
Df = diff(x*y,2)
Df = 0

入れ子になった diff 呼び出しを使用する場合に、微分変数を指定しないと、diff は呼び出しのたびに微分変数を決定します。たとえば、diff 関数を 2 回呼び出して式 x*y の 2 次導関数を求めます。

Df = diff(diff(x*y))
Df = 1

最初の呼び出しでは、diffx について x*y を微分し、y を返します。2 番目の呼び出しでは、diffy について y を微分し、1 を返します。

したがって、diff(x*y,2)diff(x*y,x,x) と等価であり、diff(diff(x*y))diff(x*y,x,y) と等価です。

x*sin(x*y) を変数 x および y について微分します。

syms x y
Df = diff(x*sin(x*y),x,y)
Df = 2xcos(xy)-x2ysin(xy)

すべての微分変数を指定して、混合高次導関数を計算することもできます。変数 xxxy について、式の混合 4 次導関数を求めます。

syms x y
Df = diff(x*sin(x*y),x,x,x,y)
Df = x2y3sin(xy)-6xy2cos(xy)-6ysin(xy)

f(x) について関数 y=f(x)2dfdx の導関数を求めます。

syms f(x) y
y = f(x)^2*diff(f(x),x);
Dy = diff(y,f(x))
Dy = 

2f(x)x f(x)

f(x) について関数 y=f(x)2dfdx の 2 次導関数を求めます。

Dy2 = diff(y,f(x),2)
Dy2 = 

2x f(x)

f(x)dfdx について関数 y=f(x)2dfdx の混合導関数を求めます。

Dy3 = diff(y,f(x),diff(f(x)))
Dy3 = 2f(x)

バネ質量系の運動を表すオイラー・ラグランジュ方程式を求めます。系の運動エネルギーと位置エネルギーを定義します。

syms x(t) m k
T = m/2*diff(x(t),t)^2;
V = k/2*x(t)^2;

ラグランジュ関数を定義します。

L = T - V
L = 

mt x(t)22-kx(t)22

オイラー・ラグランジュ方程式は次で与えられます。

0=ddtL(t,x,x˙)x˙-L(t,x,x˙)x.

L/x˙ を評価します。

D1 = diff(L,diff(x(t),t))
D1 = 

mt x(t)

2 番目の項 L/x を評価します。

D2 = diff(L,x)
D2(t) = -kx(t)

バネ質量系の運動のオイラー・ラグランジュ方程式を求めます。

diff(D1,t) - D2 == 0
ans(t) = 

m2t2 x(t)+kx(t)=0

R2021a 以降

ベクトルについて導関数を評価するには、シンボリック行列変数を使用します。たとえば、式 α=yTAx の導関数 α/x および α/y を求めます。ここで、y は 3 行 1 列のベクトル、A は 3 行 4 列の行列、x は 4 行 1 列のベクトルです。

適切なサイズの 3 つのシンボリック行列変数 xy、および A を作成し、それらを使用して alpha を定義します。

syms x [4 1] matrix
syms y [3 1] matrix
syms A [3 4] matrix
alpha = y.'*A*x
alpha = yTAx

ベクトル x および y について alpha の導関数を求めます。

Dx = diff(alpha,x)
Dx = yTA
Dy = diff(alpha,y)
Dy = xTAT

R2021a 以降

行列について導関数を評価するには、シンボリック行列変数を使用します。たとえば、式 Y=XTAX の導関数 Y/A を求めます。ここで、X は 3 行 1 列のベクトル、A は 3 行 3 列の行列です。ここでは、Y はベクトル X および行列 A の関数であるスカラーです。

2 つのシンボリック行列変数を作成して XA を表します。Y を定義します。

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

行列 A について Y の導関数を求めます。

D = diff(Y,A)
D = XTX

結果は、3 行 3 列の行列である XTX のクロネッカー テンソル積になります。

size(D)
ans = 1×2

     3     3

R2022a 以降

行列引数についてシンボリック行列関数を微分します。

関数 t(X)=Asin(BX) の導関数を求めます。ここで、A は 1 行 3 列の行列、B は 3 行 2 列の行列、X は 2 行 1 列の行列です。シンボリック行列変数を作成して AB、および X を表し、シンボリック行列関数を作成して t(X) を表します。

syms A [1 3] matrix
syms B [3 2] matrix
syms X [2 1] matrix
syms t(X) [1 1] matrix keepargs
t(X) = A*sin(B*X)
t(X) = Asin(BX)

関数を X について微分します。

Dt = diff(t,X)
Dt(X) = Acos(BX)B

R2023b 以降

ベクトルについてスカラー式の勾配を求めるには、微分パラメーターとしてシンボリック行列変数を使用します。

シンボリック行列変数 X を作成して、3 つの要素をもつベクトルを表します。これらの要素が Symbolic Math Toolbox™ でどのように格納されるかを確認するには、symmatrix2sym を使用してシンボリック行列変数の要素を表示します。

syms X [1 3] matrix
symmatrix2sym(X)
ans = (X1,1X1,2X1,3)

シンボリック行列変数の要素は X1_1X1_2、および X1_3 です。これらの要素について 3 つのシンボリック スカラー変数を作成します。これらのスカラー変数を使用してスカラー シンボリック式 expr を作成します。

syms X1_1 X1_2 X1_3
expr = 2*X1_2*sin(X1_1) + 3*sin(X1_3)*cos(X1_2);

X についてスカラー式 expr の勾配を求めます。diff 関数は、X の各要素について expr の 1 次偏導関数を見つけます。

g = diff(expr,X)
g = 

Σ1where  Σ1=(2X1,2cos(X1,1)2sin(X1,1)-3sin(X1,2)sin(X1,3)3cos(X1,2)cos(X1,3))

入力引数

すべて折りたたむ

微分する式または関数。次の値のいずれかとして指定します。

  • シンボリック式

  • シンボリック関数

  • シンボリック ベクトルまたはシンボリック行列 (シンボリック式またはシンボリック関数のベクトルまたは行列)

  • シンボリック行列変数

  • シンボリック行列関数

  • 数値式

f がシンボリック ベクトルまたはシンボリック行列である場合、difff の各要素を微分し、f と同じサイズのベクトルまたは行列を返します。

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

微分の次数。非負の整数として指定します。

微分パラメーター。シンボリック スカラー変数、シンボリック関数、または diff 関数を使用して作成された導関数として指定します。

シンボリック関数 var = f(x) または導関数 var = diff(f(x),x) についての微分を指定する場合、最初の引数 f に次の値を含めないでください。

  • fourierifourierlaplaceilaplacehtransihtransztransiztrans などの積分変換

  • limit または int を含む未評価のシンボリック式

  • f(3)g(0) などの特定の点で評価されたシンボリック関数

データ型: sym | symfun

微分パラメーター。シンボリック スカラー変数、シンボリック関数、または diff 関数を使用して作成された導関数として指定します。

データ型: sym | symfun

行列形式の微分パラメーター。シンボリック行列変数またはシンボリック行列関数として指定します。

微分パラメーターとしてシンボリック行列変数またはシンボリック行列関数を使用する場合、f は、mvar がスカラー、ベクトル、または行列を表すことができる微分可能なスカラー関数またはスカラー式でなければなりません。f の導関数をテンソルまたはテンソルの行列にすることはできません。例については、ベクトルについての微分および行列についての微分を参照してください。

ベクトルまたは行列 mvar についてスカラー関数 f を微分する際、diff は、入力サイズ mvar の転置である出力サイズを返すという規則を使用します。たとえば、f が 1 行 1 列のスカラー、mvar が 1 行 3 列の行ベクトルの場合、diff(f,mvar) は転置された mvar のそれぞれの要素について f の導関数を求め、その結果を 3 行 1 列の列ベクトルとして返します。

データ型: symmatrix | symfunmatrix

制限

  • 微分パラメーターとしてシンボリック行列変数を使用する場合、diff 関数はテンソル微分をサポートしません。導関数がテンソルの場合、または導関数がテンソルの行列の場合、diff 関数ではエラーが生成されます。

ヒント

  • 複数の変数をもつ混合高次導関数を計算する際、n を使用して導関数の次数を指定しないでください。代わりに、すべての微分変数を明示的に指定してください。

  • パフォーマンスを向上させるために、diff はすべての混合導関数が可換であると仮定します。以下に例を示します。

    xyf(x,y)=yxf(x,y)

    ほとんどの工学的問題や科学的問題について、この仮定で十分です。

  • 微分変数を指定せずに多変数式または多変数関数 f を微分すると、diff および diff(f,n) の入れ子になった呼び出しによって異なる結果が返される場合があります。これは、入れ子になった呼び出しで、微分ステップごとに独自の微分変数が決定され使用されるためです。diff(f,n) のような呼び出しでは、微分変数は symvar(f,1) によって一度決定され、すべての微分ステップで使用されます。

  • abs または sign を含む式または関数を微分する場合、引数は実数値でなければなりません。abssign の複素数引数については、diff 関数は導関数を正式に計算しますが、abssign は複素数について微分可能でないため、この結果は一般的に有効ではありません。

バージョン履歴

R2006a より前に導入

すべて展開する