このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
微分
この例では、Symbolic Math Toolbox™ を使って導関数を解析的に求めて評価する方法を説明します。例では、f(x) の 1 次および 2 次の導関数を求め、これらの導関数を使用して局所的最大値、局所的最小値、および変曲点を求めます。
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 =
この式をプロットすると、式が水平方向および垂直方向の漸近線をもち、-1 ~ 0 の間に局所的最小値、1 ~ 2 の間に局所的最大値をもつことがわかります。
fplot(f) grid
水平方向の漸近線を求めるには、正および負の無限大に近付く x
について f
の極限を計算します。水平方向の漸近線は y = 3/2
です。
lim_left = limit(f, x, -inf)
lim_left =
lim_right = limit(f, x, inf)
lim_right =
この水平方向の漸近線をプロットに追加します。
hold on plot(xlim, [lim_right lim_right], 'LineStyle', '-.', 'Color', [0.25 0.25 0.25])
f
の垂直方向の漸近線を見つけるには、f
の極を求めます。
pole_pos = poles(f, x)
pole_pos =
関数 double
を使用して、厳密解を数値的に近似します。
double(pole_pos)
ans = -1.2896
ここで、f
の局所的最小値と最大値を求めます。点が局所的極値 (最小または最大) である場合、その点における式の 1 次導関数はゼロに等しくなります。diff
を使用して f
の導関数を計算します。
g = diff(f, x)
g =
f
の局所的極値を求めるには、方程式 g == 0
を解きます。
g0 = solve(g, x)
g0 =
関数 double
を使用して、厳密解を数値的に近似します。
double(g0)
ans = 2×1
-0.1892
1.2860
式 f
では、x = 1.286
で局所的最大値に、x = -0.189
で局所的最小値になります。subs
を使用してこれらの点の関数値を得ます。
f0 = subs(f,x,g0)
f0 =
変数 f0
に関数 double
を使用して、厳密解を数値的に近似します。
double(f0)
ans = 2×1
0.1427
7.2410
グラフの極値に点のマーカーを追加します。
plot(g0, f0, 'ok')
2 次導関数:変曲点を求める
2 次導関数を計算すると、式の変曲点を求めることができます。2 階以上の高階数微分の最も効率の良い計算方法は、微分の階数を指定するパラメーターを使用することです。
h = diff(f, x, 2)
h =
次に、その結果を単純化します。
h = simplify(h)
h =
f
の変曲点を求めるには、方程式 h = 0
の解を求めます。ここでは、数値ソルバー vpasolve
を使用して解の浮動小数点近似を計算します。
h0 = vpasolve(h, x)
h0 =
式 f
の変曲点は x = 1.865
と x = 0.579
の 2 つです。vpasolve
は複素数解も返すことに注意してください。それらを無視します。
h0(imag(h0)~=0) = []
h0 =
マーカーをプロットに追加して変曲点を示します。
plot(h0, subs(f,x,h0), '*k') hold off