スカラー場とは?ベクトル場との違いを図解でわかりやすく解説

天気予報を思い出してください。「全国の気温マップ」では、地図上の各地点に気温という数値が1つ割り当てられています。一方「風の予報マップ」では、各地点に風向と風速、つまり矢印が1本割り当てられています。実はこの2枚の地図こそが、ベクトル解析で最初に学ぶ2つの概念 — スカラー場ベクトル場 — の完璧な実例です。

「場(field)」という考え方を身につけると、見える世界が大きく広がります。

  • 電磁気学: マクスウェル方程式は「電場・磁場というベクトル場の振る舞いを記述する方程式」です。場の言葉を知らないと1行も読めません
  • 流体力学: 飛行機の翼まわりの空気の流れは速度ベクトル場、圧力分布はスカラー場として解析します
  • 機械学習: ニューラルネットワークの損失関数はパラメータ空間上のスカラー場で、学習(勾配降下法)はその場の「坂を下る」操作です
  • 気象・海洋: 数値天気予報は、気温・気圧(スカラー場)と風(ベクトル場)の時間発展を計算する巨大なシミュレーションです

本記事の内容

  • 「場」の直感的なイメージ(気温マップと風マップのアナロジー)
  • スカラー場・ベクトル場の数学的定義と物理の実例
  • 等高線・等値面による「場の読み方」
  • Pythonによる可視化(contour・quiver・streamplot・3Dプロット)
  • 場の微分 — 勾配・発散・回転への橋渡し(それぞれ図つきの直感)

30秒でわかる要点

細かい話に入る前に、この記事の答えを先に置いておきます。

問い 答え
スカラー場とは? 空間の各点に数値を1つ割り当てたもの。例:気温、気圧、標高、電位、密度
ベクトル場とは? 空間の各点に矢印(向きと大きさ)を1本割り当てたもの。例:風、水流、電場、重力
2つの違いは? 向きの情報を持つかどうか。気温は温度計をどう向けても同じ値だが、風は向きが本質
勾配との関係は? 勾配 $\nabla\phi$ はスカラー場からベクトル場を作る演算。等高線に垂直で、最も急な上り坂を指す
発散・回転との関係は? 発散 $\nabla\cdot\bm{v}$ はベクトル場からスカラー場(湧き出しの量)、回転 $\nabla\times\bm{v}$ はベクトル場からベクトル場(渦の軸)を作る

以降では、この表の各行を図と数式で丁寧に埋めていきます。まずは「場」という言葉のイメージからです。

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

「場」とは何か — 空間の各点に量を貼り付ける

数学的な定義に入る前に、「場」という言葉のイメージを固めましょう。

普通の関数 $f(x)$ は「数値を入れると数値が返ってくる機械」でした。場はその拡張で、「場所を入れると量が返ってくる機械」です。空間のどの点を指差しても、そこに何らかの量(数値や矢印)が貼り付けてある — この状況全体を「場」と呼びます。

返ってくる量の種類によって、場は2つに分類されます。

  • 返ってくる量が数値1つ(温度、気圧、標高など)→ スカラー場
  • 返ってくる量が矢印1本(風、水流、電場など)→ ベクトル場

この区別は「測り方」を考えるとはっきりします。気温は温度計を置く向きを変えても同じ値です。つまり向きの情報を持ちません。一方、風は風見鶏の向きが変われば読み方も変わる、向きを持った量です。向きに依存しない量の分布がスカラー場、向きを持つ量の分布がベクトル場、と覚えておくと迷いません。

冒頭の天気予報のアナロジーを、実際に図にしてみます。

スカラー場(気温マップ)とベクトル場(風向マップ)の概念図

左の気温マップでは、どの地点を選んでもそこに「25.1℃」のような数値が1つ決まっています。これがスカラー場です。右の風マップでは、どの地点にも風向き(矢印の向き)と風の強さ(矢印の長さ・色)が決まっています。これがベクトル場です。同じ空間の上に定義されていても、「貼り付いている量」の種類が違うことがひと目でわかります。

このイメージを持ったまま、それぞれを数学の言葉で定義していきましょう。まずはスカラー場からです。

スカラー場の数学的定義

スカラー場の定義は、いま見た「各点に数値を1つ対応させる」をそのまま数式にしたものです。

スカラー場(scalar field)とは、空間の各点 $\bm{r} = (x, y, z)$ にスカラー値 $\phi(\bm{r})$ を対応させる関数です。

$$ \phi : \mathbb{R}^3 \to \mathbb{R}, \quad (x, y, z) \mapsto \phi(x, y, z) $$

記号 $\mathbb{R}^3 \to \mathbb{R}$ は「3次元空間の点を入力すると、実数が1つ出力される」と読みます。地図のような平面上の場なら $\mathbb{R}^2 \to \mathbb{R}$ です。数学的な実体は多変数関数そのものですが、「空間に分布する物理量」という気持ちを込めて「場」と呼びます。

なお、現実の気温や気圧は時刻によっても変わるので、厳密には $T(x, y, z, t)$ のように時間 $t$ も引数に持ちます。時間に依存しない場を定常場、依存する場を非定常場と呼びますが、本記事では話を簡単にするため、ある瞬間のスナップショット(定常場)だけを考えます。

物理に登場するスカラー場の代表例を挙げておきます。

スカラー場 単位
温度分布 $T(x, y, z)$ K
気圧分布 $p(x, y, z)$ Pa
電位(静電ポテンシャル) $V(x, y, z)$ V
密度分布 $\rho(x, y, z)$ kg/m³
標高(2次元の場) $h(x, y)$ m

定義はシンプルですが、3次元空間の全点に値が貼り付いた場を頭の中だけで把握するのは大変です。そこで重要になるのが「場をどう見える化するか」という技術です。

スカラー場をPythonで可視化する

2次元のスカラー場としてモデル化した気温分布 $T(x, y)$ を、色(ヒートマップ)と等値線で描いてみます。

import numpy as np
import matplotlib, matplotlib.pyplot as plt
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

# 気温風のスカラー場(南ほど暖かい+局所的な高温・低温の中心)
def temperature(X, Y):
    return (25 - 0.5 * Y
            + 4 * np.exp(-((X - 2)**2 + (Y - 1)**2) / 3)
            - 3 * np.exp(-((X + 2)**2 + (Y + 1.5)**2) / 4))

x = np.linspace(-5, 5, 300)
y = np.linspace(-4, 4, 240)
X, Y = np.meshgrid(x, y)
T = temperature(X, Y)

fig, ax = plt.subplots(figsize=(8.5, 6))
cf = ax.contourf(X, Y, T, levels=24, cmap='coolwarm')   # 色=気温
cs = ax.contour(X, Y, T, levels=10, colors='k', linewidths=0.7, alpha=0.6)
ax.clabel(cs, inline=True, fontsize=9, fmt='%.0f℃')      # 等温線にラベル
fig.colorbar(cf, ax=ax, label='気温 $T(x, y)$ [℃]')
ax.set_xlabel('$x$ [km]'); ax.set_ylabel('$y$ [km]')
ax.set_title('スカラー場の可視化①:色+等高線(等温線つき気温マップ)')
ax.set_aspect('equal')
plt.show()

スカラー場の2次元可視化(等温線つき気温マップ)

このマップから、スカラー場の読み方の基本がわかります。色の濃淡が値の大小を表し、黒い線(等温線)は「同じ気温の点をつないだ線」です。右上の赤い領域は局所的な高温の中心(ヒートアイランドのイメージ)、左下の青い領域は低温の中心で、等温線がそれぞれの中心を同心円状に取り囲んでいます。等温線が密集している場所ほど、短い距離で気温が大きく変わる「変化の激しい場所」です。

同じ場を、値を「高さ」に変換して立体的に見ることもできます。

スカラー場を高さで表した3D曲面と等高線

2次元スカラー場は、このように「地形」として見ると直感が働きます。高温の中心は山、低温の中心は谷です。底面に描いた等高線は、この山と谷を真上から見たものに他なりません。つまりヒートマップや等高線図は、3次元の地形を2次元に圧縮した表現です。後で登場する「勾配」は、まさにこの地形の上で「どちらが上り坂か」を教えてくれるベクトルになります。

ここで使った「等値線」という道具は、3次元の場にもそのまま拡張できます。次にその一般化を見てみましょう。

等高線と等値面 — 場の「同じ値」をつなぐ

スカラー場 $\phi$ に対して、値が一定値 $c$ になる点の集合

$$ \{\, \bm{r} \mid \phi(\bm{r}) = c \,\} $$

を考えます。2次元の場ではこれは曲線になり、等高線(等値線、level curve)と呼ばれます。地図の等高線、天気図の等圧線、気温マップの等温線はすべてこれです。3次元の場では同じ集合が曲面になり、等値面(level surface)と呼ばれます。

具体例で確認しましょう。$\phi(x, y) = x^2 + y^2$ の等高線は $x^2 + y^2 = c$、つまり半径 $\sqrt{c}$ の同心円です。3次元版の $\phi(x, y, z) = x^2 + y^2 + z^2$ なら、等値面 $x^2 + y^2 + z^2 = c$ は半径 $\sqrt{c}$ の球面になります。

2次元の等高線と3次元の等値面(同心円と入れ子の球面)

左の図では $\phi = 1, 4, 9$ の等高線が同心円として、右の図では同じ値の等値面が「入れ子の球面」として描かれています。等値面は3次元スカラー場を理解する基本道具で、たとえば点電荷のまわりの電位の等値面(等電位面)はこの図とまったく同じ同心球になります。「等値面が密なところは場の変化が急」という読み方も、等高線と共通です。

等高線・等値面には、後で効いてくる重要な性質がもうひとつあります。それは「等値面に沿って動いても場の値は変わらない」という、定義そのものから来る性質です。裏を返すと、場の値がもっとも急に変わる方向は等値面を垂直に横切る方向しかありません。この観察が、後述する「勾配は等高線に直交する」という性質の種になります。気象予報士が天気図の等圧線の混み具合から風の強さを読むのも、「等圧線が密=気圧の変化が急=強い力で空気が押される」という同じ理屈です。

スカラー場の定義と読み方がわかりました。次は、各点に貼り付く量が「数値」から「矢印」に変わるとどうなるか — ベクトル場を見ていきます。

ベクトル場の数学的定義

風のマップでは、各地点に「どちら向きに・どれくらいの強さで」という矢印が貼り付いていました。これを数式にしたものがベクトル場の定義です。

ベクトル場(vector field)とは、空間の各点 $\bm{r} = (x, y, z)$ にベクトル $\bm{F}(\bm{r})$ を対応させる関数です。

$$ \bm{F} : \mathbb{R}^3 \to \mathbb{R}^3, \quad (x, y, z) \mapsto \bm{F}(x, y, z) = \begin{pmatrix} F_x(x,y,z) \\ F_y(x,y,z) \\ F_z(x,y,z) \end{pmatrix} $$

出力がベクトルなので、成分で見れば $F_x, F_y, F_z$ という3つのスカラー場の組ともいえます。ただし「3つの数値の寄せ集め」ではなく「向きと大きさを持つ1本の矢印」として扱うところに、ベクトル場という見方の価値があります。座標軸の取り方を変えれば各成分の値は変わりますが、矢印そのもの(風が吹いている向きと強さ)は変わらないからです。

物理に登場するベクトル場の代表例です。

ベクトル場 単位
速度場(流体・風) $\bm{v}(x, y, z)$ m/s
電場 $\bm{E}(x, y, z)$ V/m
磁場(磁束密度) $\bm{B}(x, y, z)$ T
重力場(重力加速度) $\bm{g}(x, y, z)$ m/s²
熱流束 $\bm{q}(x, y, z)$ W/m²

ベクトル場も、可視化してはじめて直感が働きます。代表的な2つの方法をPythonで試してみましょう。

可視化① quiver — 格子点に矢印を立てる

もっとも素直な方法は、空間に格子点を取り、各点に矢印をそのまま描くことです。matplotlibでは quiver を使います。

import numpy as np
import matplotlib, matplotlib.pyplot as plt
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

# 風のモデル場 v = (U, V)
def wind(X, Y):
    U = 1.5 + 0.8 * np.sin(0.6 * Y) - 0.5 * X * np.exp(-(X**2 + Y**2) / 6)
    V = 0.8 * np.cos(0.5 * X) - 0.5 * Y * np.exp(-(X**2 + Y**2) / 6)
    return U, V

xs = np.linspace(-5, 5, 17)
ys = np.linspace(-4, 4, 14)
Xq, Yq = np.meshgrid(xs, ys)
U, V = wind(Xq, Yq)
speed = np.sqrt(U**2 + V**2)  # 風速=矢印の色に使う

fig, ax = plt.subplots(figsize=(8.5, 6))
q = ax.quiver(Xq, Yq, U, V, speed, cmap='viridis', scale=35)
fig.colorbar(q, ax=ax, label='風速 $|\\mathbf{v}|$ [m/s]')
ax.set_xlabel('$x$ [km]'); ax.set_ylabel('$y$ [km]')
ax.set_title('ベクトル場の可視化①:quiver(格子点に矢印を立てる)')
ax.set_aspect('equal')
plt.show()

quiverによるベクトル場の矢印プロット(風向風速マップ)

quiverプロットでは、矢印の向きがその点での場の方向、色(と長さ)が大きさを表します。上半分では黄色っぽい矢印が東向きに揃っていて「強い西風が吹いている」こと、下半分では矢印が短く向きもばらついていて「風が弱く乱れている」ことが読み取れます。格子を細かくしすぎると矢印が重なって読めなくなるので、表示する格子点はあえて間引くのがコツです。

可視化② streamplot — 矢印をつないで流線にする

矢印を1本1本見る代わりに、「矢印に沿って流されていく粒子の軌跡」を描く方法もあります。これを流線(streamline)と呼び、matplotlibでは streamplot で描けます。

x = np.linspace(-5, 5, 200)
y = np.linspace(-4, 4, 160)
X, Y = np.meshgrid(x, y)
U, V = wind(X, Y)
speed = np.sqrt(U**2 + V**2)

fig, ax = plt.subplots(figsize=(8.5, 6))
strm = ax.streamplot(X, Y, U, V, color=speed, cmap='viridis',
                     density=1.4, linewidth=1.2)
fig.colorbar(strm.lines, ax=ax, label='風速 $|\\mathbf{v}|$ [m/s]')
ax.set_xlabel('$x$ [km]'); ax.set_ylabel('$y$ [km]')
ax.set_title('ベクトル場の可視化②:streamplot(矢印をつないだ流線)')
ax.set_aspect('equal')
plt.show()

streamplotによるベクトル場の流線プロット

同じ場でも、流線で描くと「流れの構造」が浮かび上がります。quiverでは個々の矢印だったものが、ここでは「風がどこから来てどこへ抜けていくか」という連続した道筋として見えます。流線が混み合っている場所は流れが速い場所です。天気図の風の流れや、翼まわりの空気の流れの図でおなじみの表現は、まさにこのstreamplotです。

2つの方法の使い分けをまとめておきます。

可視化 得意なこと 向いている場面
quiver 各点の向きと大きさを正確に示す 場の局所的な値を読みたいとき
streamplot 流れの大域的な構造を示す 渦・湧き出しなどパターンを見たいとき

ここまでで、スカラー場とベクトル場を「定義して、眺める」ことができるようになりました。しかしベクトル解析の本番はここからです。場は眺めるだけでなく、微分できます。そして場を微分すると、場の隠れた構造 — 坂・湧き出し・渦 — が取り出せるのです。

場の微分への橋渡し — 勾配・発散・回転

1変数関数 $f(x)$ の微分が「グラフの傾き」を取り出したように、場の微分は場の局所的な特徴を取り出します。鍵になるのがナブラ演算子 $\nabla$ です。

$$ \nabla = \begin{pmatrix} \dfrac{\partial}{\partial x} \\[8pt] \dfrac{\partial}{\partial y} \\[8pt] \dfrac{\partial}{\partial z} \end{pmatrix} $$

$\nabla$ は「偏微分を成分に持つベクトル」のように振る舞う記号で、スカラー場に作用させるか、ベクトル場と内積を取るか、外積を取るかによって、勾配・発散・回転という3つの異なる演算を生み出します。

組み合わせ 演算 名前
$\nabla$ をスカラー場に作用 $\nabla \phi$ 勾配(grad)
$\nabla$ とベクトル場の内積 $\nabla \cdot \bm{F}$ 発散(div)
$\nabla$ とベクトル場の外積 $\nabla \times \bm{F}$ 回転(rot, curl)

「ベクトルとの掛け算が内積と外積の2通りあるから、ベクトル場の微分も2通りある」と整理すると、3つの演算が1つの記号から自然に生まれてくることがわかります。ここでは各演算の「直感」を図で押さえます(詳しい定義と計算は、それぞれの個別記事で解説しています)。

勾配(gradient) — スカラー場から「上り坂の矢印」を作る

スカラー場 $\phi$ を山の標高だと思ってください。山の各地点で「もっとも急な上り方向」と「その傾きの大きさ」を矢印にしたものが勾配 $\nabla \phi$ です。

$$ \nabla \phi = \begin{pmatrix} \dfrac{\partial \phi}{\partial x} \\[6pt] \dfrac{\partial \phi}{\partial y} \\[6pt] \dfrac{\partial \phi}{\partial z} \end{pmatrix} $$

入力はスカラー場、出力はベクトル場です。つまり勾配は「気温マップから風マップのような矢印の地図を作る」操作だといえます。

スカラー場の等高線に直交する勾配ベクトルの図

この図には勾配の2大性質が現れています。第一に、赤い勾配ベクトルはすべて山頂(値の大きい方)を向いています。第二に、勾配ベクトルは等高線と常に直交しています。等高線に沿って歩いても標高は変わらないので、標高がもっとも急に増える方向は等高線と垂直になるしかない、と考えると納得できるはずです。機械学習の勾配降下法は、この矢印の逆向き(最急降下方向)に進んで損失関数の谷を探すアルゴリズムです。詳しくは勾配(grad)の定義と幾何学的意味をわかりやすく解説を参照してください。

発散(divergence) — ベクトル場の「湧き出し」を測る

次はベクトル場の微分です。ベクトル場 $\bm{F}$ を水の流れだと思って、ある点のまわりに小さな箱を置いてみてください。箱から出ていく流れと入ってくる流れの収支を測ったものが発散 $\nabla \cdot \bm{F}$ です。

$$ \nabla \cdot \bm{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} $$

入力はベクトル場、出力はスカラー場です。各点に「湧き出しの強さ」という数値が貼り付きます。

発散の直感:湧き出しと吸い込みのベクトル場

左の場 $\bm{F} = (x, y)$ では、矢印が原点から放射状に広がっています。原点に蛇口があって水が湧き出しているイメージで、発散は正(この例では $\nabla \cdot \bm{F} = 1 + 1 = 2$)です。右の場 $\bm{F} = (-x, -y)$ はその逆で、すべての矢印が原点に吸い込まれていく排水口のイメージ、発散は負です。電磁気学のガウスの法則 $\nabla \cdot \bm{E} = \rho / \varepsilon_0$ は「電場の湧き出し口は電荷である」という主張で、発散の物理的意味そのものです。詳しくは発散(div)の定義と物理的意味を完全理解するで解説しています。

回転(rotation / curl) — ベクトル場の「渦」を測る

ベクトル場のもうひとつの微分が回転 $\nabla \times \bm{F}$ です。流れの中に小さな水車を浮かべたとき、水車がくるくる回るかどうかを測る量だとイメージしてください。

$$ \nabla \times \bm{F} = \begin{pmatrix} \dfrac{\partial F_z}{\partial y} – \dfrac{\partial F_y}{\partial z} \\[6pt] \dfrac{\partial F_x}{\partial z} – \dfrac{\partial F_z}{\partial x} \\[6pt] \dfrac{\partial F_y}{\partial x} – \dfrac{\partial F_x}{\partial y} \end{pmatrix} $$

入力はベクトル場、出力もベクトル場です。出力ベクトルの向きが渦の回転軸(右ねじの法則)、大きさが渦の強さを表します。

回転の直感:渦のある場とない場の比較

左の場 $\bm{F} = (-y, x)$ は原点のまわりを反時計回りに回る渦で、回転は $z$ 方向を向くゼロでないベクトル $(0, 0, 2)$ になります。一方、右の場 $\bm{F} = (x, y)$ は放射状に「広がるだけ」で、水車を浮かべてもその場で押し流されるだけで自転しません。回転はゼロです。面白いことに、左の渦場は発散がゼロ(広がりはない)、右の放射場は回転がゼロ(渦はない)と、ちょうど役割が逆になっています。発散と回転は、ベクトル場の独立な2つの個性を測る道具なのです。詳しくは回転(rot/curl)の定義と意味をわかりやすく解説を参照してください。

3つの演算と恒等式のまとめ

ここまでの3演算を表に整理します。

演算 記法 入力 出力 直感的な意味
勾配 $\nabla \phi$ スカラー場 ベクトル場 最急上昇の方向と急さ
発散 $\nabla \cdot \bm{F}$ ベクトル場 スカラー場 湧き出し・吸い込みの強さ
回転 $\nabla \times \bm{F}$ ベクトル場 ベクトル場 渦の軸と強さ

また、組み合わせると恒等的にゼロになる重要な関係が2つあります。

$$ \nabla \times (\nabla \phi) = \bm{0} \quad \text{(勾配で作った場に渦はない)} $$

$$ \nabla \cdot (\nabla \times \bm{F}) = 0 \quad \text{(回転で作った場に湧き出しはない)} $$

1つ目は「山の斜面をどう一周しても、出発点に戻れば標高は元通り」という事実の微分版です。2つ目は磁場 $\bm{B} = \nabla \times \bm{A}$ に湧き出し口(モノポール)がないことの数学的な根拠になっています。

理屈が揃ったところで、スカラー場とベクトル場が実際の物理で「ペア」になって現れる様子を見てみましょう。

物理の実例 — スカラー場とベクトル場はペアで現れる

物理では、スカラー場とベクトル場が勾配を介して結ばれているケースが非常に多くあります。代表的な対応を表にまとめます。

分野 スカラー場 ベクトル場 関係式
静電気学 電位 $V$ 電場 $\bm{E}$ $\bm{E} = -\nabla V$
重力 重力ポテンシャル $\Phi$ 重力場 $\bm{g}$ $\bm{g} = -\nabla \Phi$
熱伝導 温度 $T$ 熱流束 $\bm{q}$ $\bm{q} = -k\nabla T$(フーリエの法則)
流体(ポテンシャル流) 速度ポテンシャル $\phi$ 速度場 $\bm{v}$ $\bm{v} = \nabla \phi$

マイナス符号がつくのは「高い方から低い方へ流れる」からです。電場は電位の高い方から低い方へ、熱は温度の高い方から低い方へ向かいます。坂の上りではなく下りの方向を向くため、勾配に $-1$ を掛けるわけです。

このうち2つを実際に描いてみます。

点電荷の電位と電場、温度場と熱流束の物理実例

左図は点電荷のまわりの電位 $V$(色)と電場 $\bm{E} = -\nabla V$(白矢印)です。電位の等値線が同心円になり、電場の矢印がそれと直交して放射状に伸びている — 先ほど学んだ「勾配は等値線に直交する」がそのまま現れています。右図は熱伝導の例で、高温の中心(赤)から温度の低い方へ熱流束 $\bm{q} = -k\nabla T$ の矢印が流れ出しています。「スカラー場の地形」を知れば「ベクトル場の流れ」が決まる — この構造は静電気学でも重力でも熱伝導でも共通です。

最後に、ここまで2次元で描いてきた場を3次元に広げて、本記事を締めくくりましょう。

3次元ベクトル場のPython可視化

3次元のベクトル場 $\bm{F} = (-y, x, z/2)$ を3D quiverで描きます。$xy$ 成分 $(-y, x)$ は先ほどの「渦」、$z$ 成分 $z/2$ は「上下への広がり」なので、回転と発散を両方持つ場になっているはずです。

import numpy as np
import matplotlib, matplotlib.pyplot as plt
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

xv = np.linspace(-2, 2, 6)
Xv, Yv, Zv = np.meshgrid(xv, xv, xv)
Fx, Fy, Fz = -Yv, Xv, 0.5 * Zv          # F = (-y, x, z/2)
mag = np.sqrt(Fx**2 + Fy**2 + Fz**2) + 1e-10  # 向きを見やすくするため正規化

fig = plt.figure(figsize=(8.5, 7))
ax = fig.add_subplot(111, projection='3d')
ax.quiver(Xv, Yv, Zv, Fx / mag, Fy / mag, Fz / mag,
          length=0.45, color='seagreen', alpha=0.8)
ax.set_xlabel('$x$'); ax.set_ylabel('$y$'); ax.set_zlabel('$z$')
ax.set_title('3次元ベクトル場 $\\mathbf{F}=(-y,\\;x,\\;z/2)$')
plt.show()

3次元ベクトル場の可視化(z軸まわりの回転と上下への広がり)

予想どおり、矢印は $z$ 軸のまわりを回転しながら、上側($z > 0$)では上向き、下側($z < 0$)では下向きの成分を持っています。計算で確かめると、回転は $\nabla \times \bm{F} = (0, 0, 2)$、発散は $\nabla \cdot \bm{F} = 0 + 0 + 1/2 = 1/2$ となり、「渦と湧き出しを併せ持つ場」という見た目の印象と一致します。3次元の quiver は矢印が込み入って読みにくくなりがちなので、格子は粗めに取り、矢印を正規化して向きだけを示すのが実用上のコツです。

まとめ

本記事では、スカラー場とベクトル場の概念を、気温マップと風マップのアナロジーから出発して解説しました。

  • とは「空間の各点に量を対応させる関数」。数値を対応させればスカラー場 $\phi : \mathbb{R}^3 \to \mathbb{R}$、矢印を対応させればベクトル場 $\bm{F} : \mathbb{R}^3 \to \mathbb{R}^3$
  • スカラー場は色・等高線(2D)・等値面(3D)で、ベクトル場はquiver(矢印)・streamplot(流線)で可視化できる
  • 場は微分できる。勾配はスカラー場から上り坂の矢印を、発散はベクトル場から湧き出しを、回転は渦を取り出す
  • 物理ではスカラー場とベクトル場が $\bm{E} = -\nabla V$ や $\bm{q} = -k\nabla T$ のように勾配でペアになって現れる

スカラー場・ベクトル場は、ベクトル解析という建物の「土台」です。この上に勾配・発散・回転の詳細、そして線積分・面積分とそれらを結ぶ積分定理(ガウスの発散定理・ストークスの定理)が積み上がっていきます。

次のステップとして、以下の記事も参考にしてください。