平均値の定理(Mean Value Theorem)は、微積分学において最も重要な定理のひとつです。「滑らかな曲線上には、接線の傾きが割線の傾きと等しくなる点が必ず存在する」という直感的な主張ですが、ロピタルの定理、テイラー展開、不等式の証明など、解析学のあらゆる場面で活用される基盤的な定理です。
本記事では、最も基本的なロルの定理から始めて、ラグランジュの平均値の定理、そしてコーシーの平均値の定理へと段階的に進みます。各定理の証明を厳密に行い、幾何学的な意味をPythonで可視化します。
本記事の内容
- ロルの定理の証明
- ラグランジュの平均値の定理の導出
- コーシーの平均値の定理
- 応用例(関数の単調性、不等式の証明)
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
ロルの定理
定理
$f$ が閉区間 $[a, b]$ で連続、開区間 $(a, b)$ で微分可能、かつ $f(a) = f(b)$ ならば、ある $c \in (a, b)$ が存在して:
$$ \begin{equation} f'(c) = 0 \end{equation} $$
幾何学的な意味
グラフが同じ高さの2点を結ぶとき、その間のどこかに 水平な接線 を持つ点がある、ということです。山を登って同じ高さまで降りてきたなら、途中で必ず頂上(傾き0の点)を通過しているはずです。
証明
場合1: $f$ が $[a, b]$ 上で定数ならば、すべての $c \in (a, b)$ で $f'(c) = 0$。
場合2: $f$ が定数でないとき、最大値定理(ワイエルシュトラスの定理)より、$f$ は $[a, b]$ 上で最大値と最小値をとります。
$f$ が定数でないので、最大値または最小値の少なくとも一方は端点以外でとられます。それを $c$ とします($c \in (a, b)$)。
$c$ で最大値をとる場合(最小値の場合も同様):任意の $h$ に対して $f(c + h) \leq f(c)$ なので:
$$ \begin{align} h > 0 &: \quad \frac{f(c+h) – f(c)}{h} \leq 0 \implies f'(c) \leq 0 \\ h < 0 &: \quad \frac{f(c+h) - f(c)}{h} \geq 0 \implies f'(c) \geq 0 \end{align} $$
$f'(c) \leq 0$ かつ $f'(c) \geq 0$ より $f'(c) = 0$。$\square$
ラグランジュの平均値の定理
定理
$f$ が $[a, b]$ で連続、$(a, b)$ で微分可能ならば、ある $c \in (a, b)$ が存在して:
$$ \begin{equation} f'(c) = \frac{f(b) – f(a)}{b – a} \end{equation} $$
幾何学的な意味
$f$ のグラフ上の2点 $(a, f(a))$ と $(b, f(b))$ を結ぶ 割線(secant line)の傾きに等しい傾きの 接線 が、$a$ と $b$ の間に必ず存在します。
証明
ロルの定理に帰着させます。補助関数を定義します:
$$ g(x) = f(x) – f(a) – \frac{f(b) – f(a)}{b – a}(x – a) $$
$g$ は $f$ のグラフから割線を引いたものです。
確認: – $g(a) = f(a) – f(a) – 0 = 0$ – $g(b) = f(b) – f(a) – (f(b) – f(a)) = 0$ – $g$ は $[a, b]$ で連続、$(a, b)$ で微分可能
ロルの定理より、ある $c \in (a, b)$ で $g'(c) = 0$:
$$ g'(c) = f'(c) – \frac{f(b) – f(a)}{b – a} = 0 $$
$$ \therefore f'(c) = \frac{f(b) – f(a)}{b – a} $$
$\square$
コーシーの平均値の定理
定理
$f, g$ が $[a, b]$ で連続、$(a, b)$ で微分可能、かつ $(a, b)$ 上で $g'(x) \neq 0$ ならば、ある $c \in (a, b)$ が存在して:
$$ \begin{equation} \frac{f'(c)}{g'(c)} = \frac{f(b) – f(a)}{g(b) – g(a)} \end{equation} $$
幾何学的な意味
パラメータ曲線 $(g(t), f(t))$($a \leq t \leq b$)を考えると、曲線の始点と終点を結ぶ直線の傾きに等しい傾きの接線が、$a$ と $b$ の間に存在するということです。
証明
補助関数を定義します:
$$ h(x) = f(x) – f(a) – \frac{f(b) – f(a)}{g(b) – g(a)} \left[ g(x) – g(a) \right] $$
確認: – $h(a) = 0$ – $h(b) = f(b) – f(a) – \frac{f(b) – f(a)}{g(b) – g(a)}(g(b) – g(a)) = 0$
ロルの定理より、ある $c \in (a, b)$ で:
$$ h'(c) = f'(c) – \frac{f(b) – f(a)}{g(b) – g(a)} g'(c) = 0 $$
$g'(c) \neq 0$ なので:
$$ \frac{f'(c)}{g'(c)} = \frac{f(b) – f(a)}{g(b) – g(a)} $$
$\square$
応用例
応用1: 関数の単調性の判定
$f'(x) > 0$($(a, b)$ 上で)ならば $f$ は $(a, b)$ で狭義単調増加。
証明: $a < x_1 < x_2 < b$ とすると、平均値の定理より:
$$ f(x_2) – f(x_1) = f'(c)(x_2 – x_1) > 0 \quad (\because f'(c) > 0, \, x_2 – x_1 > 0) $$
応用2: 不等式の証明
$x > 0$ のとき $\ln(1 + x) < x$ を示します。
$f(t) = \ln(1 + t)$ に対し、$[0, x]$ で平均値の定理:
$$ \ln(1 + x) – \ln 1 = \frac{1}{1 + c} \cdot x \quad (0 < c < x) $$
$c > 0$ より $\frac{1}{1+c} < 1$ なので $\ln(1+x) < x$。$\square$
応用3: 関数値の評価
$|f'(x)| \leq M$ が $[a, b]$ で成り立つならば、$|f(b) – f(a)| \leq M|b – a|$。
これはリプシッツ条件の一般的な形です。
Pythonでの実装
平均値の定理の可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import brentq
def f(x):
return x**3 - 3*x + 1
def f_prime(x):
return 3*x**2 - 3
a, b = -1, 2
# 割線の傾き
secant_slope = (f(b) - f(a)) / (b - a)
# f'(c) = secant_slope となる c を求める
# 3c^2 - 3 = secant_slope → c = ±sqrt((secant_slope + 3) / 3)
c_val = np.sqrt((secant_slope + 3) / 3)
x = np.linspace(-1.5, 2.5, 500)
fig, ax = plt.subplots(figsize=(10, 7))
# 関数のプロット
ax.plot(x, f(x), 'b-', linewidth=2, label=r'$f(x) = x^3 - 3x + 1$')
# 割線
secant_y = f(a) + secant_slope * (x - a)
ax.plot(x, secant_y, 'r--', linewidth=2, alpha=0.7,
label=f'割線 (傾き = {secant_slope:.3f})')
# 端点
ax.plot([a, b], [f(a), f(b)], 'ko', markersize=10)
# 接線(c点での)
tangent_y = f(c_val) + secant_slope * (x - c_val)
ax.plot(x, tangent_y, 'g--', linewidth=2, alpha=0.7,
label=f'接線 at c = {c_val:.3f}')
ax.plot(c_val, f(c_val), 'g*', markersize=15)
# c点からの垂線
ax.vlines(c_val, min(f(x)), f(c_val), colors='green', linestyles=':', alpha=0.5)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('f(x)', fontsize=12)
ax.set_title('ラグランジュの平均値の定理', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim(-1.5, 2.5)
ax.set_ylim(-4, 6)
plt.tight_layout()
plt.show()
print(f"割線の傾き: {secant_slope:.6f}")
print(f"c = {c_val:.6f}")
print(f"f'(c) = {f_prime(c_val):.6f}")
ロルの定理の可視化
import numpy as np
import matplotlib.pyplot as plt
def g(x):
return np.sin(np.pi * x)
a, b = 0, 2 # g(0) = g(2) = 0
x = np.linspace(-0.3, 2.3, 500)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, g(x), 'b-', linewidth=2, label=r'$f(x) = \sin(\pi x)$')
ax.plot([a, b], [g(a), g(b)], 'ko', markersize=10)
# f'(c) = 0 となる点: c = 0.5, 1.5
for c in [0.5, 1.5]:
ax.plot(c, g(c), 'r*', markersize=15)
# 水平接線
ax.plot([c - 0.5, c + 0.5], [g(c), g(c)], 'r--', linewidth=2, alpha=0.7)
ax.axhline(y=0, color='k', linewidth=0.5)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('f(x)', fontsize=12)
ax.set_title('ロルの定理: f(0) = f(2) = 0 → f\'(c) = 0 となる c が存在', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
不等式 ln(1+x) < x の可視化
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.5, 5, 500)
fig, ax = plt.subplots(figsize=(10, 6))
x_pos = x[x > -0.99]
ax.plot(x_pos, np.log(1 + x_pos), 'b-', linewidth=2, label=r'$\ln(1+x)$')
ax.plot(x, x, 'r--', linewidth=2, label=r'$y = x$')
# 差を塗りつぶし
x_fill = np.linspace(0, 5, 300)
ax.fill_between(x_fill, np.log(1 + x_fill), x_fill, alpha=0.15, color='red',
label='差: $x - \ln(1+x) > 0$')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title(r'平均値の定理による不等式: $\ln(1+x) < x$ ($x > 0$)', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim(-0.5, 5)
ax.set_ylim(-1, 5)
plt.tight_layout()
plt.show()
まとめ
本記事では、平均値の定理について体系的に解説しました。
- ロルの定理: $f(a) = f(b)$ なら $f'(c) = 0$ となる $c$ が存在
- ラグランジュの平均値の定理: $f'(c) = \frac{f(b) – f(a)}{b – a}$ となる $c$ が存在(割線の傾き=接線の傾き)
- コーシーの平均値の定理: $\frac{f'(c)}{g'(c)} = \frac{f(b) – f(a)}{g(b) – g(a)}$(ロピタルの定理の基盤)
- すべてロルの定理に帰着して証明される
- 関数の単調性判定、不等式の証明、リプシッツ条件の導出に応用
次のステップとして、以下の記事も参考にしてください。
- ロピタルの定理 — コーシーの平均値の定理の直接的な応用
- テイラーの剰余項と近似精度 — 平均値の定理の一般化