微分を繰り返し適用することで得られる高階微分(高階導関数)は、関数の性質をより詳細に分析するための重要な道具です。2階微分は凹凸や極値の判定に使われ、テイラー展開では任意の階数の導関数が登場します。
本記事では、高階微分の基本概念と、積の高階微分を効率的に計算するためのライプニッツの公式について解説します。
本記事の内容
- 高階微分の定義と表記法
- 基本的な関数の高階微分
- ライプニッツの公式の導出と適用
- Pythonでの検証
前提知識
この記事を読む前に、以下の概念を理解しておくと理解が深まります。
- 微分の基本(積の微分、合成関数の微分)
- 二項係数と二項定理
高階微分の定義
n階導関数
関数 $f(x)$ の $n$ 階導関数 $f^{(n)}(x)$ は、$f(x)$ を $n$ 回繰り返し微分して得られる関数です。
$$ f^{(0)}(x) = f(x), \quad f^{(n)}(x) = \frac{d}{dx} f^{(n-1)}(x) \quad (n \geq 1) $$
表記法
高階微分にはいくつかの表記法があります。
| 表記 | 読み方 |
|---|---|
| $f^{(n)}(x)$ | $f$ の $n$ 階導関数 |
| $\frac{d^n f}{dx^n}$ | ライプニッツ記法 |
| $D^n f(x)$ | 微分作用素記法 |
| $f”(x)$, $f”'(x)$ | 2階、3階(低い階数のみ) |
基本的な関数の高階微分
べき関数 $f(x) = x^m$
$$ f^{(n)}(x) = \begin{cases} \frac{m!}{(m-n)!} x^{m-n} & (n \leq m) \\ 0 & (n > m) \end{cases} $$
特に $m = n$ のとき $f^{(n)}(x) = n!$ です。
指数関数 $f(x) = e^{ax}$
$$ f^{(n)}(x) = a^n e^{ax} $$
指数関数は何度微分しても形が変わらないという性質を持ちます。
三角関数
$$ (\sin x)^{(n)} = \sin\left(x + \frac{n\pi}{2}\right) $$
$$ (\cos x)^{(n)} = \cos\left(x + \frac{n\pi}{2}\right) $$
これは、微分するたびに位相が $\pi/2$ ずつ進むことを表しています。
対数関数 $f(x) = \ln x$
$$ f^{(n)}(x) = \frac{(-1)^{n-1} (n-1)!}{x^n} \quad (n \geq 1) $$
導出
$f'(x) = 1/x = x^{-1}$ から始めて、
$$ \begin{align} f'(x) &= x^{-1} \\ f”(x) &= -x^{-2} = \frac{(-1)^1 \cdot 1!}{x^2} \\ f”'(x) &= 2x^{-3} = \frac{(-1)^2 \cdot 2!}{x^3} \\ f^{(4)}(x) &= -6x^{-4} = \frac{(-1)^3 \cdot 3!}{x^4} \end{align} $$
帰納的に $f^{(n)}(x) = (-1)^{n-1}(n-1)!/x^n$ が示されます。
ライプニッツの公式
動機
2つの関数の積 $f(x)g(x)$ の $n$ 階微分を求めたいとき、直接計算するのは大変です。ライプニッツの公式は、これを体系的に計算する方法を与えます。
公式
$f(x)$ と $g(x)$ がともに $n$ 回微分可能であるとき、
$$ (fg)^{(n)} = \sum_{k=0}^{n} \binom{n}{k} f^{(k)} g^{(n-k)} $$
ここで $\binom{n}{k} = \frac{n!}{k!(n-k)!}$ は二項係数です。
導出
$n = 1$ のとき、これは積の微分公式そのものです。
$$ (fg)’ = f’g + fg’ $$
$n = 2$ の場合:
$$ \begin{align} (fg)” &= (f’g + fg’)’ \\ &= f”g + f’g’ + f’g’ + fg” \\ &= f”g + 2f’g’ + fg” \end{align} $$
$n = 3$ の場合:
$$ (fg)”’ = f”’g + 3f”g’ + 3f’g” + fg”’ $$
係数が二項係数 $1, 3, 3, 1$ になっていることがわかります。
一般の場合は、$n$ についての数学的帰納法で証明できます。$n$ のときに成り立つと仮定して、
$$ \begin{align} (fg)^{(n+1)} &= \frac{d}{dx} \sum_{k=0}^{n} \binom{n}{k} f^{(k)} g^{(n-k)} \\ &= \sum_{k=0}^{n} \binom{n}{k} \left[ f^{(k+1)} g^{(n-k)} + f^{(k)} g^{(n-k+1)} \right] \\ &= \sum_{k=0}^{n} \binom{n}{k} f^{(k+1)} g^{(n-k)} + \sum_{k=0}^{n} \binom{n}{k} f^{(k)} g^{(n+1-k)} \end{align} $$
第1項で $j = k+1$ と置換し、二項係数の性質 $\binom{n}{j-1} + \binom{n}{j} = \binom{n+1}{j}$ を使うと、
$$ (fg)^{(n+1)} = \sum_{j=0}^{n+1} \binom{n+1}{j} f^{(j)} g^{(n+1-j)} $$
が得られ、$n+1$ の場合も成り立ちます。
二項定理との類似
ライプニッツの公式は二項定理と構造が同じです。
$$ (a + b)^n = \sum_{k=0}^{n} \binom{n}{k} a^k b^{n-k} $$
微分作用素 $D$ を使って書くと $D^n(fg) = \sum \binom{n}{k} D^k f \cdot D^{n-k} g$ となり、形式的に $D$ を $a+b$ に対応させた関係になっています。
具体例: ライプニッツの公式の適用
例: $y = x^2 e^x$ の $n$ 階微分
$f(x) = x^2$, $g(x) = e^x$ とおきます。
$f^{(0)} = x^2$, $f^{(1)} = 2x$, $f^{(2)} = 2$, $f^{(k)} = 0$ ($k \geq 3$) です。
$g^{(k)}(x) = e^x$ です。
ライプニッツの公式より、
$$ \begin{align} (x^2 e^x)^{(n)} &= \sum_{k=0}^{2} \binom{n}{k} f^{(k)} g^{(n-k)} \\ &= \binom{n}{0} x^2 e^x + \binom{n}{1} 2x \cdot e^x + \binom{n}{2} 2 \cdot e^x \\ &= e^x \left[ x^2 + 2nx + n(n-1) \right] \end{align} $$
Pythonでの検証
ライプニッツの公式の結果を数値微分と比較して検証します。
import numpy as np
import matplotlib.pyplot as plt
from math import comb, factorial
def numerical_nth_derivative(f, x, n, h=1e-4):
"""前進差分による数値的なn階微分"""
result = 0
for k in range(n + 1):
result += (-1)**(n - k) * comb(n, k) * f(x + k * h)
return result / h**n
# y = x^2 * e^x のn階微分
def f(x):
return x**2 * np.exp(x)
def f_nth_analytical(x, n):
"""ライプニッツの公式による解析解"""
return np.exp(x) * (x**2 + 2*n*x + n*(n-1))
# 各階数の微分を可視化
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
x = np.linspace(-3, 3, 300)
for idx, n in enumerate(range(6)):
ax = axes[idx // 3, idx % 3]
y_analytical = f_nth_analytical(x, n)
y_numerical = np.array([numerical_nth_derivative(f, xi, n) for xi in x])
ax.plot(x, y_analytical, 'b-', linewidth=2, label='Analytical')
ax.plot(x, y_numerical, 'r--', linewidth=2, label='Numerical', alpha=0.7)
ax.set_title(f'$n = {n}$: $(x^2 e^x)^{{({n})}}$')
ax.set_xlabel('$x$')
ax.set_ylabel(f'$f^{{({n})}}(x)$')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
ax.set_ylim(-50, 100)
plt.suptitle("Leibniz's Formula: $n$-th derivative of $x^2 e^x$", fontsize=14, y=1.02)
plt.tight_layout()
plt.savefig('leibniz_formula.png', dpi=150, bbox_inches='tight')
plt.show()
三角関数の高階微分の可視化
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
x = np.linspace(0, 4 * np.pi, 500)
for n in range(4):
y = np.sin(x + n * np.pi / 2)
ax.plot(x, y, linewidth=2, label=f'$(\\sin x)^{{({n})}}$')
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')
ax.set_title('Higher-order derivatives of $\\sin x$')
ax.legend()
ax.grid(True, alpha=0.3)
ax.axhline(y=0, color='k', linewidth=0.5)
plt.tight_layout()
plt.savefig('sin_higher_order.png', dpi=150, bbox_inches='tight')
plt.show()
$\sin x$ の微分は $\pi/2$ ずつ位相がシフトし、$\sin \to \cos \to -\sin \to -\cos \to \sin$ と4回微分すると元に戻ることが確認できます。
まとめ
本記事では、高階微分とライプニッツの公式について解説しました。
- 高階微分: 関数を $n$ 回繰り返し微分して得られる $f^{(n)}(x)$
- 基本関数の公式: $e^{ax}$, $\sin x$, $\cos x$, $\ln x$ の $n$ 階導関数
- ライプニッツの公式: $(fg)^{(n)} = \sum_{k=0}^{n} \binom{n}{k} f^{(k)} g^{(n-k)}$ — 積の高階微分を二項係数で計算
- ライプニッツの公式は二項定理と同じ構造を持つ
高階微分はテイラー展開の基礎でもあります。次のステップとして、テイラー展開やマクローリン展開の記事も参考にしてください。