微分が「関数の変化率を求める操作」であるのに対し、積分は「変化率から元の関数を復元する操作」です。不定積分は微分の逆操作として定義され、微積分学の二本柱の一つをなしています。
不定積分の基本公式を体系的に理解することは、置換積分や部分積分といった高度な技法を学ぶための土台となります。本記事では、原始関数の定義、微分積分学の基本定理の証明、そして基本積分公式の導出を丁寧に解説します。
本記事の内容
- 原始関数と不定積分の定義
- 微分積分学の基本定理
- 基本積分公式の体系的な導出
- 不定積分の計算テクニック
- Pythonでのsympyを使った積分計算
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
原始関数と不定積分
原始関数の定義
関数 $F(x)$ が $f(x)$ の 原始関数(primitive function / antiderivative)であるとは:
$$ \begin{equation} F'(x) = f(x) \end{equation} $$
が成り立つことです。たとえば $F(x) = x^3$ は $f(x) = 3x^2$ の原始関数です。
原始関数の一意性
$F(x)$ が $f(x)$ の原始関数ならば、$F(x) + C$($C$ は任意定数)もまた $f(x)$ の原始関数です。逆に、$F_1$ と $F_2$ がともに $f$ の原始関数ならば:
$$ (F_1 – F_2)’ = f – f = 0 $$
$(F_1 – F_2)’ = 0$ が区間全体で成り立つとき、平均値の定理より $F_1 – F_2 = C$(定数)です。
不定積分
$f(x)$ の 不定積分 を次のように書きます:
$$ \begin{equation} \int f(x) \, dx = F(x) + C \end{equation} $$
ここで $F'(x) = f(x)$ であり、$C$ は 積分定数 です。
微分積分学の基本定理
第1基本定理
$f$ が区間 $[a, b]$ で連続ならば、関数:
$$ \begin{equation} F(x) = \int_a^x f(t) \, dt \end{equation} $$
は $[a, b]$ で微分可能で $F'(x) = f(x)$。
証明:
$$ \begin{align} F'(x) &= \lim_{h \to 0} \frac{F(x+h) – F(x)}{h} \\ &= \lim_{h \to 0} \frac{1}{h} \int_x^{x+h} f(t) \, dt \end{align} $$
$f$ の連続性より、平均値の定理(積分版)から $\int_x^{x+h} f(t) \, dt = f(c) \cdot h$($c$ は $x$ と $x+h$ の間)。$h \to 0$ のとき $c \to x$ なので $f(c) \to f(x)$。
$$ F'(x) = \lim_{h \to 0} f(c) = f(x) $$
$\square$
第2基本定理(ニュートン-ライプニッツの公式)
$f$ が $[a, b]$ で連続で、$F$ が $f$ の原始関数ならば:
$$ \begin{equation} \int_a^b f(x) \, dx = F(b) – F(a) = [F(x)]_a^b \end{equation} $$
証明: 第1基本定理より $G(x) = \int_a^x f(t) \, dt$ は $f$ の原始関数。$F$ も $f$ の原始関数なので $F(x) = G(x) + C$。$G(a) = 0$ より $C = F(a)$。よって:
$$ \int_a^b f(x) \, dx = G(b) = F(b) – F(a) $$
$\square$
基本積分公式
微分の逆操作として、以下の基本公式が得られます。
べき関数
$$ \int x^n \, dx = \frac{x^{n+1}}{n+1} + C \quad (n \neq -1) $$
導出: $\frac{d}{dx} \frac{x^{n+1}}{n+1} = x^n$ を確認。
$n = -1$ のとき:
$$ \int \frac{1}{x} \, dx = \ln|x| + C $$
指数関数
$$ \int e^x \, dx = e^x + C $$
$$ \int a^x \, dx = \frac{a^x}{\ln a} + C \quad (a > 0, a \neq 1) $$
三角関数
$$ \begin{align} \int \sin x \, dx &= -\cos x + C \\ \int \cos x \, dx &= \sin x + C \\ \int \tan x \, dx &= -\ln|\cos x| + C \\ \int \sec^2 x \, dx &= \tan x + C \\ \int \csc^2 x \, dx &= -\cot x + C \\ \int \sec x \tan x \, dx &= \sec x + C \end{align} $$
逆三角関数型
$$ \begin{align} \int \frac{1}{\sqrt{1-x^2}} \, dx &= \arcsin x + C \\ \int \frac{1}{1+x^2} \, dx &= \arctan x + C \\ \int \frac{1}{\sqrt{x^2 + a^2}} \, dx &= \ln\left(x + \sqrt{x^2 + a^2}\right) + C \end{align} $$
線形性
$$ \int [af(x) + bg(x)] \, dx = a \int f(x) \, dx + b \int g(x) \, dx $$
基本的な計算テクニック
テクニック1: 定数係数のくくり出し
$$ \int 5x^3 \, dx = 5 \cdot \frac{x^4}{4} + C = \frac{5x^4}{4} + C $$
テクニック2: 項ごとの積分
$$ \int (3x^2 + 2x + 1) \, dx = x^3 + x^2 + x + C $$
テクニック3: 式の変形
$$ \int \frac{x^2 + 1}{x} \, dx = \int \left(x + \frac{1}{x}\right) dx = \frac{x^2}{2} + \ln|x| + C $$
テクニック4: $f'(x)/f(x)$ 型
$$ \int \frac{f'(x)}{f(x)} \, dx = \ln|f(x)| + C $$
例: $\int \tan x \, dx = \int \frac{\sin x}{\cos x} \, dx = -\int \frac{-\sin x}{\cos x} \, dx = -\ln|\cos x| + C$
具体例
例1
$$ \int \frac{2x + 3}{x^2 + 3x + 5} \, dx = \ln|x^2 + 3x + 5| + C $$
分子が分母の微分になっていることに気づきます。
例2
$$ \int (1 + \sin x)^2 \, dx = \int (1 + 2\sin x + \sin^2 x) \, dx $$
$\sin^2 x = \frac{1 – \cos 2x}{2}$ を使って:
$$ = \int \left(\frac{3}{2} + 2\sin x – \frac{\cos 2x}{2}\right) dx = \frac{3x}{2} – 2\cos x – \frac{\sin 2x}{4} + C $$
例3
$$ \int \frac{dx}{\sqrt{4 – x^2}} = \int \frac{dx}{\sqrt{4(1 – (x/2)^2)}} = \frac{1}{2} \cdot \frac{1}{\sqrt{1-(x/2)^2}} \cdot 2 = \arcsin\frac{x}{2} + C $$
($x/2 = t$ とすると $\int \frac{dt}{\sqrt{1-t^2}} = \arcsin t$)
Pythonでの実装
sympyによる不定積分の計算
import sympy as sp
x = sp.Symbol('x')
# 基本積分公式の確認
integrals = [
(x**3, "x^3"),
(sp.sin(x), "sin(x)"),
(sp.cos(x), "cos(x)"),
(sp.exp(x), "e^x"),
(1/x, "1/x"),
(1/(1 + x**2), "1/(1+x^2)"),
(1/sp.sqrt(1 - x**2), "1/sqrt(1-x^2)"),
(sp.tan(x), "tan(x)"),
(x**2 * sp.exp(x), "x^2 * e^x"),
]
print("=" * 60)
print("sympyによる不定積分の計算")
print("=" * 60)
for expr, name in integrals:
result = sp.integrate(expr, x)
print(f"∫ {name} dx = {result}")
# 検証: 微分して元に戻るか
deriv = sp.diff(result, x)
assert sp.simplify(deriv - expr) == 0, f"検証失敗: {name}"
print("\nすべての積分が正しいことを検証しました。")
数値積分との比較
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
# f(x) = sin(x) の原始関数 F(x) = -cos(x) + 1 を数値的に検証
def f(x):
return np.sin(x)
def F_exact(x):
return -np.cos(x) + 1 # F(0) = 0 となるように定数を調整
x = np.linspace(0, 4 * np.pi, 500)
# 数値的に積分を計算
F_numerical = np.array([integrate.quad(f, 0, xi)[0] for xi in x])
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 被積分関数と原始関数
axes[0].plot(x, f(x), 'b-', linewidth=2, label=r'$f(x) = \sin x$')
axes[0].plot(x, F_exact(x), 'r-', linewidth=2, label=r'$F(x) = -\cos x + 1$')
axes[0].fill_between(x[:100], 0, f(x[:100]), alpha=0.2, color='blue')
axes[0].set_xlabel('x', fontsize=12)
axes[0].set_ylabel('y', fontsize=12)
axes[0].set_title('被積分関数と原始関数', fontsize=14)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
axes[0].axhline(y=0, color='k', linewidth=0.5)
# 右: 数値積分と解析解の比較
axes[1].plot(x, F_exact(x), 'b-', linewidth=2, label='解析解')
axes[1].plot(x, F_numerical, 'r--', linewidth=2, label='数値積分')
axes[1].set_xlabel('x', fontsize=12)
axes[1].set_ylabel(r'$\int_0^x \sin t \, dt$', fontsize=12)
axes[1].set_title('解析解 vs 数値積分', fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 誤差
max_error = np.max(np.abs(F_exact(x) - F_numerical))
print(f"最大誤差: {max_error:.2e}")
基本積分公式の一覧表
import sympy as sp
import matplotlib.pyplot as plt
x = sp.Symbol('x')
formulas = [
(r"$\int x^n \, dx$", r"$\frac{x^{n+1}}{n+1} + C$"),
(r"$\int \frac{1}{x} \, dx$", r"$\ln|x| + C$"),
(r"$\int e^x \, dx$", r"$e^x + C$"),
(r"$\int \sin x \, dx$", r"$-\cos x + C$"),
(r"$\int \cos x \, dx$", r"$\sin x + C$"),
(r"$\int \sec^2 x \, dx$", r"$\tan x + C$"),
(r"$\int \frac{1}{1+x^2} \, dx$", r"$\arctan x + C$"),
(r"$\int \frac{1}{\sqrt{1-x^2}} \, dx$", r"$\arcsin x + C$"),
]
fig, ax = plt.subplots(figsize=(10, 6))
ax.axis('off')
table = ax.table(
cellText=formulas,
colLabels=['被積分関数', '不定積分'],
loc='center',
cellLoc='center',
colWidths=[0.45, 0.45]
)
table.auto_set_font_size(False)
table.set_fontsize(14)
table.scale(1, 2)
ax.set_title('基本積分公式一覧', fontsize=16, pad=20)
plt.tight_layout()
plt.show()
まとめ
本記事では、不定積分の基本概念と公式を体系的に解説しました。
- 原始関数: $F'(x) = f(x)$ を満たす $F(x)$。積分定数 $C$ の分だけ自由度がある
- 微分積分学の基本定理: 微分と積分が逆操作であることの厳密な証明
- 基本積分公式: べき関数、指数関数、三角関数、逆三角関数型の公式を導出
- 計算テクニック: $f’/f$ 型、式の変形、展開など
- sympyを使えばプログラムで不定積分を求められる
次のステップとして、以下の記事も参考にしてください。
- 置換積分法 — 合成関数の微分の逆操作
- 部分積分法 — 積の微分の逆操作
- 有理関数の積分と部分分数分解 — 有理関数の積分テクニック