Main Content

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

diff

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

説明

Df = diff(f) は、symvar(f,1) で決まるシンボリック スカラー変数について f を微分します。

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 について、この式の 1 階微分を求めます。

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 階微分を求めます。微分の変数を指定しない場合、diff では symvar によって決まる変数が使用されます。symvar(x*y,1)x を返すため、diffx*yx についての 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)

また、すべての微分変数を指定することで、高階数混合微分を計算することもできます。変数 xxx、および y についての式の 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 の関数であるスカラーです。

X および A を表す 2 つのシンボリック行列変数を作成します。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

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

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 以降

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

3 つの成分をもつベクトルを表すシンボリック行列変数 X を作成します。これらの成分の 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 には次のいずれの値も含めてはなりません。

  • fourierifourierlaplaceilaplacehtransihtransztrans、および iztrans などの積分変換

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

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

データ型: sym | symfun

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

データ型: sym | symfun

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

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

データ型: symmatrix | symfunmatrix

制限

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

ヒント

  • 複数の変数を使用して高階数混合微分を計算する場合、微分の次数の指定に n は使用しません。代わりに、微分の変数をすべて明示的に指定します。

  • パフォーマンスを向上させるため、diff ではすべての混合微分が可換であると仮定されます。たとえば、次のようになります。

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

    工学および科学のほとんどの問題は、この仮定で十分とされます。

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

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

バージョン履歴

R2006a より前に導入

すべて展開する