メインコンテンツ

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

微分

R2026a

この例では、Symbolic Math Toolbox™ を使って導関数を解析的に求めて評価する方法を説明します。例では、f(x) の 1 次および 2 次の導関数を求め、これらの導関数を使用して局所的最大値、局所的最小値、および変曲点を求めます。

Plot of a function along with its local minimum, local maxima, and inflection points

1 次導関数を使用した局所的最小値と局所的最大値の検出

式の 1 次導関数を計算すると、その式の局所的な最小と最大を求めることができます。シンボリック式を作成する前に、シンボリック変数を作成します。

syms x

既定の設定では、虚数部の成分を含む解が結果に含まれます。ここで、x が実数であるという仮定を立てることにより、x の実数値のみを考えます。

assume(x,"real")

たとえば、有理式 (分子と分母が多項式の分数など) を作成します。

f = (3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)
f = 

3 x3+17 x2+6 x+12 x3-x+3

この式をプロットすると、式が水平方向および垂直方向の漸近線をもち、–1 ~ 0 の間に局所的最小値、1 ~ 2 の間に局所的最大値をもつことがわかります。

fplot(f)
grid

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

水平方向の漸近線を求めるには、正および負の無限大に近付く x について f の極限を計算します。水平方向の漸近線は y = 3/2 です。

lim_left = limit(f,x,-Inf)
lim_left = 

32

lim_right = limit(f,x,Inf)
lim_right = 

32

この水平方向の漸近線をプロットに追加します。

hold on
plot(xlim,[lim_right lim_right],LineStyle="-.",Color=[0.25 0.25 0.25])

Figure contains an axes object. The axes object contains 2 objects of type functionline, line.

f の垂直方向の漸近線を見つけるには、f の極を求めます。

pole_pos = poles(f,x)
pole_pos = 

-16 34-241 4324321/3-34-241 4324321/3

関数 double を使用して、厳密解を数値的に近似します。

double(pole_pos)
ans = 
-1.2896

ここで、f の局所的最小値と最大値を求めます。点が局所的極値 (最小または最大) である場合、その点における式の 1 次導関数はゼロに等しくなります。diff を使用して f の導関数を計算します。

g = diff(f,x)
g = 

9 x2+34 x+62 x3-x+3-6 x2-1 3 x3+17 x2+6 x+12 x3-x+32

f の局所的極値を求めるには、方程式 g == 0 を解きます。

g0 = solve(g,x)
g0 = 

(σ26 σ31/6-σ1-1568σ26 σ31/6+σ1-1568)where  σ1=337491 6 3 3 1789396323559826+2198209982639304+2841 σ31/3 σ2578-9 σ32/3 σ2-361 σ22896 σ31/6 σ21/4  σ2=2841 σ31/31156+9 σ32/3+361289  σ3=3 178939632355176868+2198209530604

関数 double を使用して、厳密解を数値的に近似します。

double(g0)
ans = 2×1

   -0.1892
    1.2860

式 f では、x = 1.286 で局所的最大値に、x = -0.189 で局所的最小値になります。subs を使用してこれらの点の関数値を得ます。

f0 = subs(f,x,g0)
f0 = 

(3 σ2-17 σ5-σ6+15682-σ4+σ1+1134σ6+2 σ2-σ5-21968-σ4+17 σ6+σ5-15682+3 σ3+σ1-1134σ6-2 σ3+σ5-21968)where  σ1=σ7σ91/6 σ81/4  σ2=σ5-σ6+15683  σ3=σ6+σ5-15683  σ4=σ8σ91/6  σ5=σ76 σ91/6 σ81/4  σ6=σ86 σ91/6  σ7=337491 6 3 3 1789396323559826+2198209982639304+2841 σ91/3 σ8578-9 σ92/3 σ8-361 σ8289  σ8=2841 σ91/31156+9 σ92/3+361289  σ9=3 178939632355176868+2198209530604

変数 f0 に double 関数を使用して、厳密解を数値的に近似します。

double(f0)
ans = 2×1

    0.1427
    7.2410

グラフの極値に点のマーカーを追加します。

plot(g0,f0,"ok")

Figure contains an axes object. The axes object contains 3 objects of type functionline, line. One or more of the lines displays its values using only markers

2 次導関数を使用した変曲点の検出

2 次導関数を計算すると、式の変曲点を求めることができます。2 階以上の高階数微分の最も効率の良い計算方法は、微分の階数を指定するパラメーターを使用することです。

h = diff(f,x,2)
h = 

18 x+34σ1-2 6 x2-1 9 x2+34 x+6σ12-12 x σ2σ12+2 6 x2-12 σ2σ13where  σ1=2 x3-x+3  σ2=3 x3+17 x2+6 x+1

次に、その結果を単純化します。

h = simplify(h)
h = 

2 68 x6+90 x5+18 x4-699 x3-249 x2+63 x+1722 x3-x+33

f の変曲点を求めるには、方程式 h = 0 の解を求めます。ここでは、数値ソルバー vpasolve を使用して解の浮動小数点近似を計算します。

h0 = vpasolve(h,x)
h0 = 

(0.578718426554417483196010858601961.8651543689917122385037075917613-1.4228127856020972275345064554049-1.8180342567480118987898749770461 i-1.4228127856020972275345064554049+1.8180342567480118987898749770461 i-0.46088831805332057449182335801198+0.47672261854520359440077796751805 i-0.46088831805332057449182335801198-0.47672261854520359440077796751805 i)

式 f の変曲点は x = 1.865 と x = 0.579 の 2 つです。vpasolve は複素数解も返すことに注意してください。複素数解を除外します。

h0(imag(h0)~=0) = []
h0 = 

(0.578718426554417483196010858601961.8651543689917122385037075917613)

マーカーをプロットに追加して変曲点を示します。

plot(h0,subs(f,x,h0),"*k")
hold off

Figure contains an axes object. The axes object contains 4 objects of type functionline, line. One or more of the lines displays its values using only markers