日常生活で「面積」や「体積」を計算する場面を考えてみましょう。長方形の面積は縦×横で求まりますが、曲線で囲まれた領域の面積や、複雑な形状の立体の体積はどうでしょうか。1変数の定積分が「曲線の下の面積」を求めるのと同じように、重積分は「曲面の下の体積」や、より一般に「多次元領域上の関数の総和」を求めます。
重積分は微積分学の応用で最も実用的な道具の一つであり、以下のような場面で不可欠です。
- 物理学: 物体の質量・重心・慣性モーメントの計算(密度が一様でない場合)
- 確率論: 多変量確率分布の周辺分布や確率の計算($P(A) = \iint_A f(x,y) \, dxdy$)
- 電磁気学: 電場・磁場のガウスの法則、ビオ・サバールの法則
- 流体力学: 流量の計算、ナビエ・ストークス方程式の積分形
本記事の内容
- 二重積分の定義と直感的な理解
- 累次積分(逐次積分)による計算方法
- 積分順序の変更
- 極座標への変数変換とヤコビアン
- 三重積分と球面座標
- Pythonによる数値積分の実装
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
- ヤコビ行列とヤコビアンの意味を理解する — 座標変換のヤコビアン
- 積分の基本定理 — 1変数の定積分
二重積分とは — 曲面の下の「体積」
直感的な理解
1変数の定積分 $\int_a^b f(x) \, dx$ は、$y = f(x)$ のグラフと $x$ 軸の間の「面積」を計算していました。これを2変数に拡張すると、$z = f(x, y)$ のグラフと $xy$ 平面の間の「体積」を計算することになります。
具体的にイメージしてみましょう。$xy$ 平面上の領域 $D$ の上に、高さ $f(x, y)$ の建物が建っているとします。この建物全体の「容積」が二重積分 $\iint_D f(x, y) \, dA$ です。
計算の基本的なアイデアは、領域 $D$ を微小な長方形に分割し、各長方形の上の「小さな柱」の体積 $f(x_i, y_j) \Delta x \Delta y$ を全て足し合わせることです。分割を無限に細かくした極限が二重積分です。
数学的定義
領域 $D \subset \mathbb{R}^2$ 上の関数 $f(x, y)$ の二重積分は
$$ \begin{equation} \iint_D f(x, y) \, dA = \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k^*, y_k^*) \Delta A_k \end{equation} $$
ここで $\{(x_k^*, y_k^*)\}$ は各小領域の代表点、$\Delta A_k$ は各小領域の面積です。
$f(x, y) = 1$ のとき、二重積分は領域 $D$ の面積 $\iint_D 1 \, dA = \text{Area}(D)$ に等しくなります。$f(x, y) \geq 0$ のとき、二重積分は「曲面 $z = f(x,y)$ と $xy$ 平面の間の体積」です。
定義はわかりましたが、実際にどのように計算するのでしょうか。次に、最も基本的な計算方法である累次積分を見てみましょう。
累次積分(逐次積分)
フビニの定理
二重積分を実際に計算するには、2つの1変数積分の繰り返し(累次積分)に帰着させます。これを保証するのがフビニの定理です。
定理(フビニの定理): $f$ が領域 $D$ 上で連続(または絶対可積分)ならば
$$ \begin{equation} \iint_D f(x, y) \, dA = \int_a^b \left(\int_{g_1(x)}^{g_2(x)} f(x, y) \, dy\right) dx = \int_c^d \left(\int_{h_1(y)}^{h_2(y)} f(x, y) \, dx\right) dy \end{equation} $$
ここで、$D$ がy方向に単純な領域($a \leq x \leq b$, $g_1(x) \leq y \leq g_2(x)$)またはx方向に単純な領域($c \leq y \leq d$, $h_1(y) \leq x \leq h_2(y)$)である場合です。
内側の積分では一方の変数を固定して積分し、外側の積分でもう一方の変数について積分します。「1次元のスライスを積み重ねる」というイメージです。
計算例1: 長方形領域
$\iint_D (x^2 + y) \, dA$ を計算します。$D = \{(x,y) : 0 \leq x \leq 2, 0 \leq y \leq 1\}$ です。
まず $y$ について積分します($x$ は定数扱い)。
$$ \int_0^1 (x^2 + y) \, dy = \left[x^2 y + \frac{y^2}{2}\right]_0^1 = x^2 + \frac{1}{2} $$
次に $x$ について積分します。
$$ \int_0^2 \left(x^2 + \frac{1}{2}\right) dx = \left[\frac{x^3}{3} + \frac{x}{2}\right]_0^2 = \frac{8}{3} + 1 = \frac{11}{3} $$
計算例2: 三角形領域
$\iint_D xy \, dA$ を計算します。$D$ は $x = 0$, $y = 0$, $x + y = 1$ で囲まれた三角形です。
$D$ を $x$ で走査すると、$0 \leq x \leq 1$ で $0 \leq y \leq 1 – x$ です。
内側の積分($y$ について):
$$ \int_0^{1-x} xy \, dy = x\left[\frac{y^2}{2}\right]_0^{1-x} = \frac{x(1-x)^2}{2} $$
外側の積分($x$ について):
$$ \int_0^1 \frac{x(1-x)^2}{2} dx = \frac{1}{2}\int_0^1 (x – 2x^2 + x^3) \, dx $$
各項を計算すると
$$ = \frac{1}{2}\left[\frac{x^2}{2} – \frac{2x^3}{3} + \frac{x^4}{4}\right]_0^1 = \frac{1}{2}\left(\frac{1}{2} – \frac{2}{3} + \frac{1}{4}\right) = \frac{1}{2} \cdot \frac{1}{12} = \frac{1}{24} $$
積分順序の変更
累次積分では、積分の順序を入れ替えることが計算を簡単にすることがあります。
例: $\int_0^1 \int_x^1 e^{y^2} \, dy \, dx$ を計算します。
この積分は内側の $\int e^{y^2} dy$ が初等関数で表せないため、このままでは計算できません。積分領域を図示すると $0 \leq x \leq y$, $0 \leq y \leq 1$ であることがわかります。積分順序を入れ替えると
$$ \int_0^1 \int_0^y e^{y^2} \, dx \, dy = \int_0^1 y e^{y^2} \, dy = \frac{1}{2}\left[e^{y^2}\right]_0^1 = \frac{e – 1}{2} $$
内側の $x$ 積分が簡単に実行でき、外側の $y$ 積分も置換積分で求まりました。積分順序の変更は、重積分の計算における重要なテクニックです。
累次積分は直交座標での計算に適していますが、円形や球形の領域では不便です。次に、座標変換による計算方法を見ていきましょう。
座標変換と変数変換公式
変数変換公式
座標変換 $(x, y) = \bm{T}(u, v)$ を使うと、積分領域の形状に適した座標系で計算できます。変数変換公式は
$$ \begin{equation} \iint_D f(x, y) \, dx \, dy = \iint_{D’} f(\bm{T}(u, v)) \left|\frac{\partial(x, y)}{\partial(u, v)}\right| du \, dv \end{equation} $$
ここで $\left|\frac{\partial(x, y)}{\partial(u, v)}\right|$ はヤコビアン(ヤコビ行列式の絶対値)であり、座標変換による面積要素の拡大率を表します。$D’$ は $u$-$v$ 空間での積分領域です。
極座標変換
円形の領域で最もよく使われる座標変換は極座標変換です。
$$ x = r\cos\theta, \quad y = r\sin\theta $$
ヤコビアンは $\left|\frac{\partial(x,y)}{\partial(r,\theta)}\right| = r$ なので
$$ \begin{equation} \iint_D f(x, y) \, dx \, dy = \int_{\alpha}^{\beta} \int_{r_1(\theta)}^{r_2(\theta)} f(r\cos\theta, r\sin\theta) \cdot r \, dr \, d\theta \end{equation} $$
$r$ という因子が現れることに注目してください。これは「角度 $\theta$ の微小変化に対応する弧の長さが $r$ に比例する」ことを反映しています。
ガウス積分の計算
極座標変換の最も美しい応用例の一つが、ガウス積分の計算です。
$$ I = \int_{-\infty}^{\infty} e^{-x^2} dx $$
この積分は初等関数では計算できません。しかし、$I^2$ を考えるとうまくいきます。
$$ I^2 = \left(\int_{-\infty}^{\infty} e^{-x^2} dx\right)\left(\int_{-\infty}^{\infty} e^{-y^2} dy\right) = \iint_{\mathbb{R}^2} e^{-(x^2+y^2)} dx \, dy $$
極座標変換を適用します。$x^2 + y^2 = r^2$ であり、$\mathbb{R}^2$ 全体は $0 \leq r < \infty$, $0 \leq \theta < 2\pi$ に対応します。
$$ I^2 = \int_0^{2\pi} \int_0^{\infty} e^{-r^2} \cdot r \, dr \, d\theta $$
$\theta$ の積分は $2\pi$ を与えます。$r$ の積分は $u = r^2$ と置換すると
$$ \int_0^{\infty} r e^{-r^2} dr = \frac{1}{2}\int_0^{\infty} e^{-u} du = \frac{1}{2} $$
したがって $I^2 = 2\pi \cdot \frac{1}{2} = \pi$ であり
$$ \begin{equation} I = \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} \end{equation} $$
この結果は正規分布の正規化定数に直結します。正規分布 $N(\mu, \sigma^2)$ の密度関数 $\frac{1}{\sqrt{2\pi}\sigma}e^{-(x-\mu)^2/(2\sigma^2)}$ の $\frac{1}{\sqrt{2\pi}\sigma}$ は、ガウス積分から導かれます。
球の体積
3次元の球面座標変換も見ておきましょう。半径 $R$ の球の体積は
$$ V = \iiint_{x^2+y^2+z^2 \leq R^2} dx \, dy \, dz $$
球面座標 $(r, \theta, \phi)$ に変換します。$0 \leq r \leq R$, $0 \leq \theta \leq \pi$, $0 \leq \phi \leq 2\pi$ であり、ヤコビアンは $r^2 \sin\theta$ です。
$$ V = \int_0^{2\pi} \int_0^{\pi} \int_0^{R} r^2 \sin\theta \, dr \, d\theta \, d\phi $$
各積分を順に計算します。
$$ \int_0^R r^2 dr = \frac{R^3}{3}, \quad \int_0^{\pi} \sin\theta \, d\theta = 2, \quad \int_0^{2\pi} d\phi = 2\pi $$
したがって $V = \frac{R^3}{3} \cdot 2 \cdot 2\pi = \frac{4}{3}\pi R^3$ が得られます。
この計算を一般化すると、$n$ 次元超球の体積も同様の手法で求めることができます。$n$ 次元球面座標を導入し、ヤコビアンを計算して各変数について逐次積分を行うと、半径 $R$ の $n$ 次元超球の体積は $V_n(R) = \frac{\pi^{n/2}}{\Gamma(n/2 + 1)} R^n$ となります。ここで $\Gamma$ はガンマ関数です。$n = 2$ では $V_2 = \pi R^2$(円の面積)、$n = 3$ では $V_3 = \frac{4}{3}\pi R^3$ が再現されます。興味深いことに、$n$ を大きくすると超球の体積は $n \approx 5$ 付近で最大値をとり、その後は急速にゼロへ減少していきます。これは「次元の呪い」と呼ばれる現象の一例であり、高次元空間では体積の大部分が超球の表面付近に集中することと関連しています。
また、球面座標においてヤコビアン $r^2 \sin\theta$ が現れる理由を幾何学的に理解しておくことも重要です。$r$ 方向の微小変化 $dr$ はそのまま長さ $dr$ に対応しますが、天頂角 $\theta$ 方向の微小変化 $d\theta$ は半径 $r$ の円弧に沿った長さ $r \, d\theta$ に対応し、方位角 $\phi$ 方向の微小変化 $d\phi$ は半径 $r\sin\theta$($z$ 軸からの距離)の円弧に沿った長さ $r\sin\theta \, d\phi$ に対応します。したがって微小体積要素は $dr \times r\,d\theta \times r\sin\theta\,d\phi = r^2 \sin\theta \, dr \, d\theta \, d\phi$ となり、ヤコビアンが自然に現れます。
重積分の計算方法を一通り学んだところで、Pythonで数値的に確認してみましょう。
Pythonでの実装と可視化
二重積分の可視化と数値計算
累次積分の「スライスの積み上げ」を可視化します。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy import integrate
# f(x, y) = sin(x) * cos(y)
def f(x, y):
return np.sin(x) * np.cos(y)
x = np.linspace(0, np.pi, 100)
y = np.linspace(0, np.pi/2, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure(figsize=(16, 5))
# (a) 3D曲面と積分領域
ax1 = fig.add_subplot(131, projection='3d')
ax1.plot_surface(X, Y, Z, cmap='viridis', alpha=0.7, edgecolor='none')
ax1.set_xlabel('x'); ax1.set_ylabel('y'); ax1.set_zlabel('z')
ax1.set_title(r'$f(x,y) = \sin x \cos y$', fontsize=12)
ax1.view_init(elev=25, azim=135)
# (b) 累次積分: 固定した x でのスライス
ax2 = fig.add_subplot(132)
x_fixed_vals = [0.5, 1.0, 1.5, 2.0, 2.5]
colors = plt.cm.viridis(np.linspace(0, 1, len(x_fixed_vals)))
for x_val, color in zip(x_fixed_vals, colors):
y_plot = np.linspace(0, np.pi/2, 100)
z_plot = f(x_val, y_plot)
ax2.fill_between(y_plot, 0, z_plot, alpha=0.3, color=color)
ax2.plot(y_plot, z_plot, color=color, linewidth=1.5,
label=f'x={x_val:.1f}')
ax2.set_xlabel('y', fontsize=12)
ax2.set_ylabel('f(x, y)', fontsize=12)
ax2.set_title('Slices at fixed x values', fontsize=12)
ax2.legend(fontsize=8)
ax2.grid(True, alpha=0.3)
# (c) 数値積分の比較
ax3 = fig.add_subplot(133)
# 解析解
# ∫₀^π ∫₀^{π/2} sin(x)cos(y) dy dx = ∫₀^π sin(x) dx * ∫₀^{π/2} cos(y) dy
# = [-cos(x)]₀^π * [sin(y)]₀^{π/2} = 2 * 1 = 2
analytical = 2.0
# 種々の分割数での数値積分
n_values = np.array([5, 10, 20, 50, 100, 200, 500])
errors_midpoint = []
errors_simpson = []
for n in n_values:
# 中点則による数値積分
dx = np.pi / n
dy = (np.pi / 2) / n
x_mid = np.linspace(dx/2, np.pi - dx/2, n)
y_mid = np.linspace(dy/2, np.pi/2 - dy/2, n)
Xm, Ym = np.meshgrid(x_mid, y_mid)
numerical_mid = np.sum(f(Xm, Ym)) * dx * dy
errors_midpoint.append(abs(numerical_mid - analytical))
# scipy.integrate.dblquad
result, _ = integrate.dblquad(f, 0, np.pi, 0, np.pi/2)
errors_simpson.append(abs(result - analytical))
ax3.loglog(n_values, errors_midpoint, 'bo-', linewidth=1.5, label='Midpoint rule')
ax3.loglog(n_values, n_values**(-2.0) * errors_midpoint[0] * n_values[0]**2,
'b--', alpha=0.3, label=r'$O(n^{-2})$')
ax3.set_xlabel('Number of grid points per axis', fontsize=12)
ax3.set_ylabel('Absolute error', fontsize=12)
ax3.set_title('Numerical Integration Error', fontsize=12)
ax3.legend(fontsize=9)
ax3.grid(True, alpha=0.3, which='both')
plt.tight_layout()
plt.savefig('multiple_integral.png', dpi=150, bbox_inches='tight')
plt.show()
# 数値積分の結果
result, error = integrate.dblquad(f, 0, np.pi, 0, np.pi/2)
print(f"解析解: {analytical}")
print(f"数値解 (dblquad): {result:.10f}, 推定誤差: {error:.2e}")
このグラフから、二重積分の計算方法が視覚的に理解できます。
-
左図(3D曲面): $f(x,y) = \sin x \cos y$ の曲面を描いています。この曲面と $xy$ 平面の間の体積が二重積分の値です。
-
中央図(スライス): 固定した $x$ の値ごとに、$y$ 方向の断面を描いています。各スライスの面積を $x$ について積み上げたものが累次積分です。$x$ が大きいほど $\sin x$ の影響で断面が大きく($x \leq \pi/2$)なったり小さくなったり($x > \pi/2$)することがわかります。
-
右図(数値誤差): 中点則による数値積分の誤差が分割数の2乗に反比例して減少しています。これは中点則の理論的な精度 $O(h^2)$ と一致します。
極座標変換によるガウス積分の数値検証
ガウス積分 $\int e^{-x^2} dx = \sqrt{\pi}$ を極座標変換で数値的に確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
# ガウス積分の数値検証
# I^2 = ∫∫ e^{-(x^2+y^2)} dxdy を極座標で計算
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (a) e^{-(x^2+y^2)} のヒートマップ
ax = axes[0]
x = np.linspace(-3, 3, 200)
y = np.linspace(-3, 3, 200)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2))
im = ax.pcolormesh(X, Y, Z, cmap='hot', shading='auto')
plt.colorbar(im, ax=ax)
# 等高線
contour = ax.contour(X, Y, Z, levels=[0.01, 0.1, 0.5, 0.9], colors='white', alpha=0.7)
ax.clabel(contour, inline=True, fontsize=9, fmt='%.2f')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title(r'$e^{-(x^2+y^2)}$', fontsize=13)
ax.set_aspect('equal')
# (b) 極座標での被積分関数 r * e^{-r^2}
ax = axes[1]
r = np.linspace(0, 4, 200)
integrand = r * np.exp(-r**2)
ax.plot(r, integrand, 'b-', linewidth=2)
ax.fill_between(r, 0, integrand, alpha=0.3, color='blue')
# 面積 = 1/2
ax.text(1.5, 0.15, r'Area $= \frac{1}{2}$', fontsize=14, color='blue')
ax.set_xlabel('r', fontsize=12)
ax.set_ylabel(r'$r e^{-r^2}$', fontsize=12)
ax.set_title('Integrand in polar coordinates', fontsize=13)
ax.grid(True, alpha=0.3)
# (c) 有限区間での近似値と真値の比較
ax = axes[2]
R_values = np.linspace(0.5, 5, 100)
approx_values = []
for R in R_values:
# ∫_0^R r*e^{-r^2} dr = (1/2)(1 - e^{-R^2})
val = 0.5 * (1 - np.exp(-R**2))
approx_values.append(2 * np.pi * val) # I^2 の近似
approx_values = np.array(approx_values)
I_approx = np.sqrt(approx_values)
ax.plot(R_values, I_approx, 'b-', linewidth=2, label=r'$\sqrt{2\pi \int_0^R r e^{-r^2}dr}$')
ax.axhline(np.sqrt(np.pi), color='red', linestyle='--', linewidth=1.5,
label=rf'$\sqrt{{\pi}} = {np.sqrt(np.pi):.4f}$')
ax.set_xlabel('Integration radius R', fontsize=12)
ax.set_ylabel(r'Approximation of $I$', fontsize=12)
ax.set_title('Convergence of Gaussian integral', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('gaussian_integral.png', dpi=150, bbox_inches='tight')
plt.show()
# 数値検証
I_numerical, _ = integrate.quad(lambda x: np.exp(-x**2), -np.inf, np.inf)
print(f"ガウス積分(数値): {I_numerical:.10f}")
print(f"sqrt(pi): {np.sqrt(np.pi):.10f}")
print(f"誤差: {abs(I_numerical - np.sqrt(np.pi)):.2e}")
このグラフから、ガウス積分の極座標変換による計算が理解できます。
-
左図(被積分関数のヒートマップ): $e^{-(x^2+y^2)}$ は原点を中心とした円対称な関数で、原点で最大値1をとり、原点から離れるほど急速に減衰します。等高線が同心円になっていることから、極座標変換が自然であることがわかります。
-
中央図(極座標での被積分関数): 極座標変換後の被積分関数 $re^{-r^2}$ は1変数関数になり、$r = 1/\sqrt{2}$ 付近でピークを持ちます。この関数の定積分は $1/2$ であり、$\theta$ の積分 $2\pi$ と合わせて $I^2 = \pi$ が得られます。
-
右図(収束の様子): 積分範囲の半径 $R$ を大きくしていくと、近似値が急速に $\sqrt{\pi} \approx 1.7725$ に収束します。$R = 3$ 程度でほぼ真値に一致しており、ガウス関数の急速な減衰が寄与しています。
積分順序の変更の可視化
積分順序を変更する例を可視化します。
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 積分領域: 0 <= x <= y, 0 <= y <= 1
# つまり 0 <= x <= 1, x <= y <= 1
# (a) dy dx の順序
ax = axes[0]
# x を固定したときの y の範囲
x_vals = np.linspace(0, 1, 6)
for x_val in x_vals:
ax.plot([x_val, x_val], [x_val, 1], 'b-', alpha=0.5, linewidth=1)
# 領域の境界
ax.plot([0, 1], [0, 1], 'r-', linewidth=2.5, label='$y = x$')
ax.plot([0, 1], [1, 1], 'k-', linewidth=2)
ax.plot([0, 0], [0, 1], 'k-', linewidth=2)
ax.fill_between([0, 1], [0, 1], [1, 1], alpha=0.15, color='blue')
ax.annotate(r'$\int_0^1 \int_x^1 f \, dy \, dx$',
xy=(0.3, 0.7), fontsize=14, color='blue',
bbox=dict(boxstyle='round', facecolor='lightyellow'))
ax.annotate('', xy=(0.4, 0.6), xytext=(0.4, 0.9),
arrowprops=dict(arrowstyle='->', color='blue', lw=2))
ax.text(0.45, 0.75, 'dy', fontsize=12, color='blue')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title('Order: dy dx', fontsize=13)
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=11)
# (b) dx dy の順序
ax = axes[1]
y_vals = np.linspace(0, 1, 6)
for y_val in y_vals:
if y_val > 0:
ax.plot([0, y_val], [y_val, y_val], 'g-', alpha=0.5, linewidth=1)
ax.plot([0, 1], [0, 1], 'r-', linewidth=2.5, label='$y = x$')
ax.plot([0, 1], [1, 1], 'k-', linewidth=2)
ax.plot([0, 0], [0, 1], 'k-', linewidth=2)
ax.fill_between([0, 1], [0, 1], [1, 1], alpha=0.15, color='green')
ax.annotate(r'$\int_0^1 \int_0^y f \, dx \, dy$',
xy=(0.3, 0.7), fontsize=14, color='green',
bbox=dict(boxstyle='round', facecolor='lightyellow'))
ax.annotate('', xy=(0.3, 0.5), xytext=(0.05, 0.5),
arrowprops=dict(arrowstyle='->', color='green', lw=2))
ax.text(0.12, 0.43, 'dx', fontsize=12, color='green')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_title('Order: dx dy', fontsize=13)
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=11)
plt.tight_layout()
plt.savefig('integral_order.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、積分順序の変更における積分範囲の変化が視覚的に理解できます。左図では $x$ を固定して $y$ を $x$ から $1$ まで積分し(青い縦線)、右図では $y$ を固定して $x$ を $0$ から $y$ まで積分しています(緑の横線)。同じ三角形領域を覆っていますが、スキャンの方向が異なります。$\int_0^1 \int_x^1 e^{y^2} dy\,dx$ のように内側の積分が解析的に実行できない場合、積分順序を $\int_0^1 \int_0^y e^{y^2} dx\,dy$ に変更すると計算が可能になります。
重積分の応用例
質量・重心・慣性モーメント
物体の密度が $\rho(x, y)$ で与えられるとき、物理量は重積分で計算されます。
全質量: $M = \iint_D \rho(x, y) \, dA$
重心: $\bar{x} = \frac{1}{M}\iint_D x \rho(x, y) \, dA$, $\bar{y} = \frac{1}{M}\iint_D y \rho(x, y) \, dA$
慣性モーメント: 原点周りの慣性モーメントは $I_O = \iint_D (x^2 + y^2) \rho(x, y) \, dA$
たとえば、半径 $R$ の一様な円盤(密度 $\rho_0$)の慣性モーメントを計算しましょう。極座標変換を適用すると
$$ I_O = \int_0^{2\pi} \int_0^R r^2 \cdot \rho_0 \cdot r \, dr \, d\theta = \rho_0 \int_0^{2\pi} d\theta \int_0^R r^3 \, dr = \rho_0 \cdot 2\pi \cdot \frac{R^4}{4} = \frac{\pi \rho_0 R^4}{2} $$
全質量 $M = \pi R^2 \rho_0$ を使うと $I_O = \frac{1}{2}MR^2$ となり、よく知られた円盤の慣性モーメントの公式が得られます。この計算では、被積分関数が $r$ のみの関数($\theta$ に依存しない)であるため、$\theta$ の積分が単に $2\pi$ を掛けるだけになる点がポイントです。
一般座標変換の手順
座標変換を使って重積分を計算する一般的な手順をまとめておきましょう。
- 積分領域の形状を分析する: 円形・球形なら極座標・球面座標が適切
- 変換を選ぶ: $(x, y) = \bm{T}(u, v)$ を定義する
- ヤコビアンを計算する: $J = \det\left(\frac{\partial(x,y)}{\partial(u,v)}\right)$
- 新しい積分領域を求める: 元の領域 $D$ が変換後にどうなるかを確認する
- 被積分関数を書き換える: $f(x,y)$ を $f(T(u,v))$ に置き換え、$|J|\,du\,dv$ を掛ける
この手順を体系的に適用すれば、複雑な形状の領域上の積分も効率的に計算できます。特に、被積分関数が $x^2 + y^2$ や $x^2 + y^2 + z^2$ を含む場合は、対応する座標系(極座標・球面座標)への変換が劇的に計算を簡単にします。
まとめ
本記事では、重積分の理論と計算方法について解説しました。
- 二重積分 $\iint_D f(x,y) \, dA$ は、曲面 $z = f(x,y)$ と $xy$ 平面の間の体積(符号付き)を表す
- フビニの定理により、二重積分は累次積分(逐次積分)に帰着できる。積分順序の変更が計算を簡単にすることがある
- 座標変換では、ヤコビアンの絶対値 $|J|$ を面積要素に掛ける。極座標では $dA = r\,dr\,d\theta$、球面座標では $dV = r^2\sin\theta\,dr\,d\theta\,d\phi$
- ガウス積分 $\int_{-\infty}^{\infty} e^{-x^2}dx = \sqrt{\pi}$ は極座標変換で導出できる
- 球の体積 $\frac{4}{3}\pi R^3$ は球面座標での三重積分から得られる
次のステップとして、以下の記事も参考にしてください。
- 線積分の定義と計算方法を解説する — 曲線上の積分
- 面積分の定義と計算方法 — 曲面上の積分
- ヤコビ行列とヤコビアンの意味を理解する — ヤコビアンの理論