第2回 演習解答:ベクトル場と場の微分 | Portfolio第2回 演習解答:ベクトル場と場の微分
NOTE-019f36e0更新: 2026-07-06物理
一般相対性理論の学び直し数学ベクトル解析ベクトル場勾配発散回転
第2回 演習解答:ベクトル場と場の微分
「一般相対性理論の学び直し」シリーズ第2回の演習解答です。記号・用語は本編に従います。総和は明示し、レヴィ・チヴィタ記号 εijk は本編§4の定義を用います。
演習 1
問題 ∇×(∇f)=0 を、成分表示と偏微分の順序交換(第1回)を用いて示せ。
解答. 回転の定義 (∇×G)i=∑j,kεijk∂jGk に G=∇f(Gk=∂kf)を代入すると、
[∇×(∇f)]i=j,k∑εijk∂xj∂j,k∑εijk∂xj∂x f∈C2 のとき、第1回のシュワルツの定理より二階偏微分は順序交換でき、∂xj∂xk∂2f は添字 j,k の入れ替えについて対称です。一方、εijk は j,k の入れ替えについて反対称(εijk=−εikj)です。
本編の補題(対称と反対称の縮約は消える)を、固定した i のもとで添字対 (j,k) に適用すると、和は 0 になります。明示的に確かめるなら、和のダミー添字 j,k を入れ替えて
j,k∑εijk∂j∂kf=j,k∑εikj∂k∂jj,k∑(−εijk)∂j∂k (第2の等号で εikj=−εijk と ∂k∂jf=∂j∂k を使った)。左辺を Ti とおけば Ti=−Ti、ゆえに Ti=0。すべての i で成り立つので ∇×(∇f)=0。
演習 2
問題 ∇⋅(∇×F)=0 を同様に示せ。
∇⋅(∇×F)=i∑∂xi∂(∇×F)i=i∑∂xi∂j,k∑i,j,k∑εijk∂xi∂x k を固定して (i,j) の和を見ると、∂xi∂xj∂2Fk は i,j について対称(シュワルツの定理、第1回)、εijk は i,j について反対称(εijk=−εjik)です。演習1と同じ議論(ダミー添字 i,j の入れ替え)により、各 k についての和は 0。したがって全体の和も 0 で、∇⋅(∇×F)=0。
演習 3
問題 f=1/r(r=∣r∣, r=(x,y,z))について ∇f を求め、r=0 で ∇2f=0 を示せ。
勾配. まず ∂xi∂r=rxi(第1回で扱った関係)に注意します。合成関数の微分より、i 成分は
∂xi∂(r1)=−r21∂xi∂r=−r21⋅rxi=−r3xi. ∇f=−r3r=−r21r^ で、原点に向かう逆二乗の場です(r^=r/r)。
ラプラシアン. ∇2f=∇⋅(∇f)=i∑∂xi∂(−r3xi) を計算します。積の微分と ∂r/∂xi=xi/r を用いると、各項は
∂xi∂(−xir−3)=−[r−3+xi⋅(−3)r−4∂x−[r−3−3xir−4⋅rx−r−3+3(xi)2r−5. i=1,2,3 について和をとり、i∑(xi)2=r2 を使うと、
∇2f=i∑(−r−3+3(xi)2r−5)=−3r−3+3r−5=r2−3r−3+3r−3=0. ゆえに r=0 で ∇2(1/r)=0。
注. これは原点を除いて成り立ちます。原点は f=1/r の特異点であり、そこでは点源に対応する寄与が生じます(その定式化はここでは扱いません)。
演習 4
問題 ε-δ 恒等式 ∑iεijkεilm=δjlδkm−δjmδkl を用いて ∇×(∇×F)=∇(∇⋅F)−∇2F を導け。
[∇×(∇×F)]i=j,k∑ε ε は巡回置換で不変なので εijk=εkij。和の添字を k にそろえて ε-δ 恒等式を適用すると、
k∑εkijεklm=δilδjm−δimδjl. [∇×(∇×F)]i=j,l,m∑(δilδjm−δimδjl)∂xj∂xl 2項に分けます。第1項は δilδjm により l=i, m=j が選ばれ、
j,l,m∑δilδjm∂ 第2項は δimδjl により m=i, l=j が選ばれ、
j,l,m∑δimδjl∂xj∂xl∂2Fm=j∑∂(xj)2∂2F∇2Fi. [∇×(∇×F)]i=[∇(∇⋅F)]i−∇2Fi, すなわち ∇×(∇×F)=∇(∇⋅F)−∇2F。
補足(ε-δ 恒等式の確認). ∑iεijkεilm は、j=k かつ l=m のときだけ 0 でない。和で残る i は {j,k} にも {l,m} にも含まれない唯一の値。(l,m)=(j,k) なら二つの ε は同符号で積は +1、(l,m)=(k,j) なら反対符号で積は −1。これを δ で表すと δjlδkm−δ に一致する。
発展演習:回転場の発散・回転の数値確認
問題 2次元回転場 F(x,y)=(−y,x) について、数値微分で発散と回転(z 成分)を計算し、解析値 ∇⋅F=0、(∇×F)z=2 と一致することを確かめ、場を可視化せよ。
解析値の確認. ∇⋅F=∂x(−y)+∂y(x)=0。(∇×F)z=∂。
import numpy as np
import matplotlib.pyplot as plt
# 2次元回転場 F = (-y, x)
def Fx(x, y): return -y
def Fy(x, y): return x
# グリッド
n = 21
xs = np.linspace(-2, 2, n)
ys = np.linspace(-2, 2, n)
X, Y = np.meshgrid(xs, ys)
U, V = Fx(X, Y), Fy(X, Y)
# 中心差分で偏微分を評価
h = xs[1] - xs[0]
dFx_dx = (Fx(X + h, Y) - Fx(X - h, Y)) / (2*h)
dFy_dy = (Fy(X, Y + h) - Fy(X, Y - h)) / (2*h)
dFy_dx = (Fy(X + h, Y) - Fy(X - h, Y)) / (2*h)
dFx_dy = (Fx(X, Y + h) - Fx(X, Y - h)) / (2*h)
div = dFx_dx + dFy_dy # 解析値 0
curl_z = dFy_dx - dFx_dy # 解析値 2
print("div の最大絶対値:", np.max(np.abs(div))) # ≈ 0(数値誤差の範囲)
print("curl_z の平均:", np.mean(curl_z)) # ≈ 2
plt.figure(figsize=(6, 6))
plt.quiver(X, Y, U, V, color='0.4')
plt.gca().set_aspect('equal')
plt.title("F = (-y, x)")
plt.tight_layout()
plt.savefig("rotation_field.png", dpi=150)
plt.show()
using Plots
using Statistics
Fx(x, y) = -y
Fy(x, y) = x
n = 21
xs = range(-2, 2, length=n)
ys = range(-2, 2, length=n)
X = [x for x in xs, y in ys]
Y = [y for x in xs, y in ys]
U = Fx.(X, Y)
V = Fy.(X, Y)
h = xs[2] - xs[1]
dFx_dx = (Fx.(X .+ h, Y) .- Fx.(X .- h, Y)) ./ (2h)
dFy_dy = (Fy.(X, Y .+ h) .- Fy.(X, Y .- h)) ./ (2h)
dFy_dx = (Fy.(X .+ h, Y) .- Fy.(X .- h, Y)) ./ (2h)
dFx_dy = (Fx.(X, Y .+ h) .- Fx.(X, Y .- h)) ./ (2h)
div = dFx_dx .+ dFy_dy
curl_z = dFy_dx .- dFx_dy
println("div の最大絶対値: ", maximum(abs.(div)))
println("curl_z の平均 : ", mean(curl_z))
# Plots.jl の quiver は 1D 座標 + 2D 成分を matplotlib と異なる解釈するため、
# 各格子点に矢印を手動で描く。arrow=:head で終点側に矢印を付け、Python の quiver と同じ向きにする。
default(size=(600, 600), legend=false, arrow=arrow(0.35, 0.35, 0.25))
p = plot(aspect_ratio=:equal, title="F = (-y, x)", xlims=(-2.2, 2.2), ylims=(-2.2, 2.2))
scale = 0.15
for i in 1:n, j in 1:n
x0, y0 = X[i, j], Y[i, j]
u, v = U[i, j], V[i, j]
u == 0 && v == 0 && continue
plot!(p, [x0, x0 + scale * u], [y0, y0 + scale * v];
color=:gray, lw=0.8, arrow=:head, label="")
end
savefig(p, "rotation_field_julia.png")
数値確認. 上記コードを実行すると、標準出力に次のような値が出ます。
div の最大絶対値: 0.0
curl_z の平均 : 2.0
確認できること. div はどの点でもほぼ 0、curl_z はどの点でもほぼ 2 となり、解析値と一致します。可視化すると場は原点まわりを反時計回りに循環しており、「発散なし・回転あり」という結果と整合します。線形な場なので中心差分は(丸め誤差を除いて)厳密値を返します。
(∂xk∂f)
=
k
∂2f
.
f
=
f
f
εijk
∂xj∂Fk
=
j
∂2Fk
.
i
∂r
]
=
i
]
=
i∑(xi)2
=
ij
k
∂xj∂
(
∇
×
F)k=
j,k∑εijk∂xj∂l,m∑εklm∂xl∂Fm=
j,k,l,m∑εijkεklm∂xj∂xl∂2Fm.
∂2Fm
.
xj
∂
xl
∂2Fm
=
j∑∂xj∂xi∂2Fj=
∂xi∂j∑∂xj∂Fj=
∂xi∂(∇⋅
F)=
[∇(∇⋅
F)]i.
i
=
jm
δkl
x
Fy
−
∂yFx=
∂x(x)−
∂y(−y)=
1−
(−1)=
2