微積分を学ぶ際、最初に出てくる重要な概念が「極限」です。高校数学では「$x$ を $a$ に限りなく近づけると $f(x)$ が $L$ に近づく」といった直感的な表現で極限を扱いますが、大学数学ではこれを厳密に定義する必要があります。
その厳密な定義が ε-δ論法(イプシロン・デルタ論法) です。ε-δ論法は解析学の基礎をなす論法であり、微積分の定理を証明する際に不可欠な道具です。
本記事の内容
- ε-δ論法の直感的な理解
- 数学的な定義と読み方
- 具体例を用いたε-δ論法の適用
- Pythonによる可視化
前提知識
この記事を読む前に、以下の概念を理解しておくと読み進めやすくなります。
- 関数の基本的な概念($y = f(x)$ の意味)
- 絶対値の性質($|a – b|$ が $a$ と $b$ の距離を表すこと)
極限の直感的な理解
まず、極限とは何かを直感的に理解しましょう。
$$ \lim_{x \to a} f(x) = L $$
この式は、「$x$ が $a$ に近づくとき、$f(x)$ は $L$ に近づく」ことを意味します。ここで重要なのは、$x = a$ における $f(x)$ の値は問題にしていないということです。あくまで $x$ が $a$ に近づくときの振る舞いを見ています。
例えば、$f(x) = 2x + 1$ のとき、$x \to 3$ での極限を考えると、$x$ が $3$ に近づくにつれて $f(x)$ は $7$ に近づきます。これは直感的に明らかです。
しかし、「近づく」とはどの程度近づけば十分なのでしょうか。この曖昧さを排除するのがε-δ論法です。
ε-δ論法の定義
ε-δ論法による極限の定義は次の通りです。
$$ \lim_{x \to a} f(x) = L $$
とは、
$$ \forall \varepsilon > 0, \; \exists \delta > 0 \; \text{s.t.} \; 0 < |x - a| < \delta \Rightarrow |f(x) - L| < \varepsilon $$
を意味します。
日本語で読むと次のようになります。
任意の正の数 $\varepsilon$ に対して、ある正の数 $\delta$ が存在して、$0 < |x - a| < \delta$ を満たすすべての $x$ について $|f(x) - L| < \varepsilon$ が成り立つ。
定義の読み解き方
この定義を順番に読み解きましょう。
- $\varepsilon > 0$: これは $f(x)$ と $L$ の誤差の許容範囲です。どんなに小さな $\varepsilon$ を指定されても、という意味です。
- $\delta > 0$: $\varepsilon$ に応じて決まる、$x$ と $a$ の距離の制約です。
- $0 < |x - a| < \delta$: $x$ が $a$ のδ近傍にあること(ただし $x = a$ は除く)。
- $|f(x) – L| < \varepsilon$: そのとき $f(x)$ は $L$ のε近傍にあること。
イメージとしては、「出力の精度($\varepsilon$)をどれだけ厳しく要求されても、入力を十分に近づければ($\delta$ を適切に選べば)その要求を満たせる」ということです。
具体例1: $\lim_{x \to 3} (2x + 1) = 7$
実際にε-δ論法を使って、$\lim_{x \to 3} (2x + 1) = 7$ を証明してみましょう。
任意の $\varepsilon > 0$ が与えられたとします。$\delta = \varepsilon / 2$ とおきます。
$0 < |x - 3| < \delta$ のとき、
$$ \begin{align} |f(x) – L| &= |(2x + 1) – 7| \\ &= |2x – 6| \\ &= 2|x – 3| \\ &< 2\delta \\ &= 2 \cdot \frac{\varepsilon}{2} \\ &= \varepsilon \end{align} $$
よって $|f(x) – 7| < \varepsilon$ が成り立ちます。したがって、$\lim_{x \to 3} (2x + 1) = 7$ が示されました。
δの見つけ方
上の証明では $\delta = \varepsilon / 2$ と天下り的に設定しましたが、実際にはどうやって $\delta$ を見つけるのでしょうか。
コツは、$|f(x) – L|$ を計算して $|x – a|$ で表すことです。
$$ |f(x) – L| = |2x + 1 – 7| = 2|x – 3| $$
$2|x – 3| < \varepsilon$ となるには $|x - 3| < \varepsilon / 2$ であればよいので、$\delta = \varepsilon / 2$ と設定すればよいことがわかります。
具体例2: $\lim_{x \to 2} x^2 = 4$
次に、2次関数の例を見てみましょう。
任意の $\varepsilon > 0$ に対して、$\delta = \min(1, \varepsilon / 5)$ とおきます。
$0 < |x - 2| < \delta$ のとき、$\delta \leq 1$ より $|x - 2| < 1$ なので $1 < x < 3$ です。したがって $|x + 2| < 5$ です。
$$ \begin{align} |x^2 – 4| &= |x – 2||x + 2| \\ &< \delta \cdot 5 \\ &\leq \frac{\varepsilon}{5} \cdot 5 \\ &= \varepsilon \end{align} $$
よって $\lim_{x \to 2} x^2 = 4$ が示されました。
ここでのポイントは、$|x + 2|$ を定数で上から抑えるために、まず $\delta \leq 1$ という制約を設けたことです。2次以上の関数では、このように $\delta$ に上限を設けるテクニックがよく使われます。
Pythonでの可視化
ε-δ論法を視覚的に理解するために、Pythonで可視化してみましょう。
import numpy as np
import matplotlib.pyplot as plt
# f(x) = 2x + 1, a = 3, L = 7 の場合
def f(x):
return 2 * x + 1
a = 3
L = 7
# εとδの関係を可視化
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
epsilons = [2.0, 1.0, 0.5]
for idx, eps in enumerate(epsilons):
ax = axes[idx]
delta = eps / 2 # δ = ε/2
x = np.linspace(0, 6, 300)
y = f(x)
ax.plot(x, y, 'b-', linewidth=2, label='$f(x) = 2x + 1$')
# εの範囲(水平帯)
ax.axhspan(L - eps, L + eps, alpha=0.2, color='red', label=f'$|f(x) - {L}| < \\varepsilon$')
ax.axhline(y=L, color='red', linestyle='--', alpha=0.5)
# δの範囲(垂直帯)
ax.axvspan(a - delta, a + delta, alpha=0.2, color='green', label=f'$|x - {a}| < \\delta$')
ax.axvline(x=a, color='green', linestyle='--', alpha=0.5)
ax.set_xlim(0, 6)
ax.set_ylim(0, 14)
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
ax.set_title(f'$\\varepsilon = {eps}$, $\\delta = {delta}$')
ax.legend(fontsize=8, loc='upper left')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('epsilon_delta.png', dpi=150, bbox_inches='tight')
plt.show()
このコードでは、$\varepsilon$ を変化させたときの $\delta$ の対応を可視化しています。$\varepsilon$ が小さくなると $\delta$ も小さくなり、$x$ を $a$ により近づける必要があることがわかります。緑の帯($\delta$ の範囲)内のグラフが、赤い帯($\varepsilon$ の範囲)内に収まっていることを確認してください。
極限が存在しない場合
ε-δ論法は極限の存在を示すだけでなく、極限が存在しないことを示す際にも使えます。
例えば、$f(x) = \sin(1/x)$ について $\lim_{x \to 0} \sin(1/x)$ は存在しません。これは、$x \to 0$ のとき $1/x$ が激しく振動するため、$f(x)$ がどの値にも収束しないからです。
import numpy as np
import matplotlib.pyplot as plt
# sin(1/x) の振る舞いを可視化
fig, ax = plt.subplots(figsize=(10, 5))
x_pos = np.linspace(0.001, 1, 5000)
x_neg = np.linspace(-1, -0.001, 5000)
ax.plot(x_pos, np.sin(1 / x_pos), 'b-', linewidth=0.5, alpha=0.8)
ax.plot(x_neg, np.sin(1 / x_neg), 'b-', linewidth=0.5, alpha=0.8)
ax.set_xlim(-1, 1)
ax.set_ylim(-1.5, 1.5)
ax.set_xlabel('$x$')
ax.set_ylabel('$\\sin(1/x)$')
ax.set_title('$f(x) = \\sin(1/x)$: Limit does not exist as $x \\to 0$')
ax.axhline(y=0, color='k', linewidth=0.5)
ax.axvline(x=0, color='k', linewidth=0.5)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('sin_1_over_x.png', dpi=150, bbox_inches='tight')
plt.show()
グラフを見ると、$x = 0$ の近傍で $\sin(1/x)$ が $-1$ と $1$ の間を激しく振動しており、特定の値に収束しないことがわかります。
まとめ
本記事では、ε-δ論法による極限の厳密な定義を解説しました。
- ε-δ論法は「任意の $\varepsilon > 0$ に対して適切な $\delta > 0$ が存在する」という形式で極限を定義する
- $\varepsilon$ は出力の精度、$\delta$ は入力の制約を表す
- 1次関数では $\delta$ は $\varepsilon$ の定数倍で求まる
- 2次以上の関数では $\delta$ に上限を設けて $|f(x) - L|$ を制御するテクニックを使う
- Pythonの可視化で、$\varepsilon$ と $\delta$ の対応関係を直感的に理解できる
ε-δ論法は慣れるまで難しく感じますが、解析学のあらゆる定理の出発点です。次のステップとして、連続関数の定義もε-δ論法で記述されますので、以下の記事も参考にしてください。