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) は、symmatrix 型のシンボリック行列変数 mvar について f を微分します (R2021a 以降)。

すべて折りたたむ

関数 sin(x^2) の微分を求めます。

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

x = 2 における微分値を求めます。結果を double に変換します。

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

この式の 1 次導関数を求めます。

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

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

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

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

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

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

syms t
D4 = diff(t^6,4)
D4 = 360t2360*t^2
D5 = diff(t^6,5)
D5 = 720t720*t
D6 = diff(t^6,6)
D6 = 720sym(720)

変数 y について、この式の 2 次導関数を求めます。

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

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

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

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

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

最初の diff の呼び出しでは、x について 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) と等価です。

この式を変数 xy について微分します。

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

また、すべての微分変数を与えることで、高階数混合微分を計算することもできます。

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

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)2*f(x)*diff(f(x), x)

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

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

2x f(x)2*diff(f(x), x)

f(x) および dfdx についての関数 y=f(x)2dfdx の混合微分を求めます。

Dy3 = diff(y,f(x),diff(f(x)))
Dy3 = 2f(x)2*f(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(m*(diff(x(t), t))^2)/2 - (k*x(t)^2)/2

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

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

L/x˙ を評価します。

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

mt x(t)m*diff(x(t), t)

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

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

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

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

m2t2 x(t)+kx(t)=0m*diff(x(t), t, 2) + k*x(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 = yTAxtranspose(symmatrix('y', [3 1]))*symmatrix('A', [3 4])*symmatrix('x', [4 1])

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

Dx = diff(alpha,x)
Dx = yTAtranspose(symmatrix('y', [3 1]))*symmatrix('A', [3 4])
Dy = diff(alpha,y)
Dy = xTATtranspose(symmatrix('x', [4 1]))*transpose(symmatrix('A', [3 4]))

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 = XTAXtranspose(symmatrix('X', [3 1]))*symmatrix('A', [3 3])*symmatrix('X', [3 1])

行列 A について Y の微分を求めます。

D = diff(Y,A)
D = XTXkron(transpose(symmatrix('X', [3 1])), symmatrix('X', [3 1]))

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

size(D)
ans = 1×2

     3     3

入力引数

すべて折りたたむ

以下として指定される、微分する式または関数

  • シンボリック式

  • シンボリック関数

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

  • シンボリック行列変数 (R2021a 以降)

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

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

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

シンボリック関数 var = f(x) または導関数 var = diff(f(x),x) について微分を指定する場合、最初の引数 f には次のいずれも含めてはなりません。

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

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

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

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

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

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

R2021a 以降

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

現在、関数 diff はテンソル微分をサポートしていません。微分がテンソルである場合、または微分がテンソルに関する行列である場合、関数 diff はエラーになります。f が微分可能なスカラー関数である場合、mvar はスカラー、ベクトル、または行列にすることができます。その他の例については、ベクトルについての微分および行列についての微分を参照してください。

データ型: symmatrix

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

ヒント

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

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

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

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

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

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

R2006a より前に導入