連続関数は微積分の基盤となる概念です。直感的には「グラフがつながっている関数」ですが、数学的にはε-δ論法を用いて厳密に定義されます。
連続関数の性質を正しく理解することは、微分積分学はもちろん、解析学全般において非常に重要です。中間値の定理や最大値定理など、連続関数に関する多くの定理が微積分の議論の土台となっています。
本記事の内容
- 連続関数のε-δ定義
- 不連続点の分類
- 中間値の定理と最大値定理
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
連続関数とは
直感的な理解
連続関数を直感的に言えば、「グラフを描くときにペンを紙から離さずに一筆書きできる関数」です。つまり、グラフに「跳び」や「穴」がない関数のことです。
しかし、この直感だけでは数学的に不十分です。例えば、$f(x) = \sin(1/x)$($x \neq 0$)のグラフは一筆書きできそうに見えますが、$x = 0$ で連続にできるかどうかは直感だけでは判断が難しくなります。
ε-δ論法による定義
関数 $f(x)$ が点 $a$ で連続であるとは、
$$ \forall \varepsilon > 0, \; \exists \delta > 0 \; \text{s.t.} \; |x – a| < \delta \Rightarrow |f(x) - f(a)| < \varepsilon $$
が成り立つことをいいます。
極限の定義と似ていますが、2つの違いがあります。
- $0 < |x - a|$ ではなく $|x - a|$ である($x = a$ も含む)
- $L$ の代わりに $f(a)$ を使う($f(a)$ が定義されている必要がある)
つまり、連続性は次の3つの条件が同時に満たされることを要求しています。
- $f(a)$ が定義されている
- $\lim_{x \to a} f(x)$ が存在する
- $\lim_{x \to a} f(x) = f(a)$
区間での連続
関数 $f(x)$ が区間 $[a, b]$ で連続であるとは、$(a, b)$ の各点で連続であり、かつ端点 $a$ で右連続、端点 $b$ で左連続であることをいいます。
右連続の定義:
$$ \lim_{x \to a^+} f(x) = f(a) $$
左連続の定義:
$$ \lim_{x \to b^-} f(x) = f(b) $$
不連続点の分類
関数が連続でない点を不連続点といいます。不連続点は以下の3つに分類されます。
除去可能な不連続点
$\lim_{x \to a} f(x)$ は存在するが、$f(a)$ が未定義、または $f(a) \neq \lim_{x \to a} f(x)$ である場合です。
例えば、$f(x) = \frac{x^2 – 1}{x – 1}$($x \neq 1$)は $x = 1$ で除去可能な不連続点を持ちます。
$$ \lim_{x \to 1} \frac{x^2 – 1}{x – 1} = \lim_{x \to 1} \frac{(x-1)(x+1)}{x-1} = \lim_{x \to 1}(x+1) = 2 $$
跳躍不連続点
左極限と右極限が異なる場合です。
$$ \lim_{x \to a^-} f(x) \neq \lim_{x \to a^+} f(x) $$
本質的不連続点
左極限または右極限が存在しない(振動する、または無限大に発散する)場合です。
連続関数の具体例の証明
$f(x) = x^2$ が任意の点 $a$ で連続であることをε-δ論法で証明します。
任意の $\varepsilon > 0$ に対して、$\delta = \min\left(1, \frac{\varepsilon}{2|a| + 1}\right)$ とおきます。
$|x – a| < \delta$ のとき、$\delta \leq 1$ より $|x - a| < 1$ なので $|x + a| \leq |x - a| + 2|a| < 1 + 2|a|$ です。
$$ \begin{align} |f(x) – f(a)| &= |x^2 – a^2| \\ &= |x – a||x + a| \\ &< \delta(1 + 2|a|) \\ &\leq \frac{\varepsilon}{2|a| + 1} \cdot (1 + 2|a|) \\ &= \varepsilon \end{align} $$
よって $f(x) = x^2$ は任意の点で連続です。
連続関数の重要な性質
中間値の定理
$f$ が閉区間 $[a, b]$ で連続で、$f(a) \neq f(b)$ のとき、$f(a)$ と $f(b)$ の間の任意の値 $k$ に対して、$f(c) = k$ を満たす $c \in (a, b)$ が存在します。
$$ f(a) < k < f(b) \Rightarrow \exists c \in (a, b) \; \text{s.t.} \; f(c) = k $$
この定理の応用として、方程式の解の存在を示すことができます。例えば、$f(x) = x^3 – x – 1$ について $f(1) = -1 < 0$、$f(2) = 5 > 0$ なので、$f(c) = 0$ を満たす $c \in (1, 2)$ が存在します。
最大値・最小値の定理(ワイエルシュトラスの定理)
$f$ が閉区間 $[a, b]$ で連続ならば、$f$ は $[a, b]$ 上で最大値と最小値を達成します。
$$ \exists c, d \in [a, b] \; \text{s.t.} \; f(c) \leq f(x) \leq f(d) \quad \forall x \in [a, b] $$
Pythonでの可視化
不連続点の分類の可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# (1) 除去可能な不連続点: f(x) = (x^2-1)/(x-1)
ax = axes[0]
x = np.linspace(-1, 3, 500)
x = x[np.abs(x - 1) > 0.01] # x=1の近傍を除去
y = (x**2 - 1) / (x - 1)
ax.plot(x, y, 'b-', linewidth=2)
ax.plot(1, 2, 'wo', markersize=8, markeredgecolor='b', markeredgewidth=2) # 穴
ax.set_title('Removable discontinuity')
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
ax.grid(True, alpha=0.3)
ax.set_xlim(-1, 3)
ax.set_ylim(-1, 5)
# (2) 跳躍不連続点: 符号関数
ax = axes[1]
x_neg = np.linspace(-2, 0, 200, endpoint=False)
x_pos = np.linspace(0, 2, 200)
ax.plot(x_neg, -np.ones_like(x_neg), 'b-', linewidth=2)
ax.plot(x_pos, np.ones_like(x_pos), 'b-', linewidth=2)
ax.plot(0, -1, 'bo', markersize=8)
ax.plot(0, 1, 'wo', markersize=8, markeredgecolor='b', markeredgewidth=2)
ax.set_title('Jump discontinuity')
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
ax.grid(True, alpha=0.3)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
# (3) 本質的不連続点: sin(1/x)
ax = axes[2]
x = np.linspace(0.005, 1, 5000)
ax.plot(x, np.sin(1/x), 'b-', linewidth=0.5)
ax.plot(-x, np.sin(-1/x), 'b-', linewidth=0.5)
ax.set_title('Essential discontinuity')
ax.set_xlabel('$x$')
ax.set_ylabel('$\\sin(1/x)$')
ax.grid(True, alpha=0.3)
ax.set_xlim(-1, 1)
ax.set_ylim(-1.5, 1.5)
plt.tight_layout()
plt.savefig('discontinuity_types.png', dpi=150, bbox_inches='tight')
plt.show()
中間値の定理の可視化
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
# f(x) = x^3 - x - 1
x = np.linspace(0.5, 2.2, 300)
y = x**3 - x - 1
ax.plot(x, y, 'b-', linewidth=2, label='$f(x) = x^3 - x - 1$')
ax.axhline(y=0, color='k', linewidth=0.5)
# f(1) = -1, f(2) = 5
ax.plot(1, -1, 'ro', markersize=10, label='$f(1) = -1$')
ax.plot(2, 5, 'go', markersize=10, label='$f(2) = 5$')
# 二分法で解を近似
from scipy.optimize import brentq
c = brentq(lambda x: x**3 - x - 1, 1, 2)
ax.plot(c, 0, 'k*', markersize=15, label=f'$c \\approx {c:.4f}$')
ax.axvline(x=c, color='gray', linestyle='--', alpha=0.5)
# 中間値のk=0を表示
ax.fill_between([1, 2], -1, 5, alpha=0.1, color='orange')
ax.set_xlabel('$x$')
ax.set_ylabel('$f(x)$')
ax.set_title('Intermediate Value Theorem')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('intermediate_value_theorem.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、連続関数の定義と性質について解説しました。
- 連続性のε-δ定義: $|x – a| < \delta \Rightarrow |f(x) - f(a)| < \varepsilon$
- 不連続点の分類: 除去可能、跳躍、本質的の3種類
- 中間値の定理: 連続関数は中間の値を必ず取る
- 最大値・最小値の定理: 閉区間上の連続関数は最大・最小を達成する
連続関数の概念を理解したら、次は微分の理論に進みましょう。以下の記事も参考にしてください。