ベクトル空間の定義と公理をわかりやすく解説

ベクトル空間(vector space)は線形代数の最も基本的な概念です。高校までは「ベクトル=矢印」というイメージで扱いますが、大学数学ではベクトル空間を公理的に定義します。この抽象化により、矢印に限らず関数や行列なども「ベクトル」として統一的に扱えるようになります。

本記事では、ベクトル空間の定義を8つの公理とともに丁寧に解説し、具体例を通じて理解を深めます。

本記事の内容

  • ベクトル空間の8つの公理
  • 具体的なベクトル空間の例
  • 部分空間の定義と判定
  • Pythonでの可視化

前提知識

この記事を読む前に、以下の概念を理解しておくと理解が深まります。

  • 集合の基本概念
  • 実数の四則演算の性質

ベクトル空間の定義

直感的な理解

ベクトル空間とは、大雑把に言うと「足し算とスカラー倍ができる集合」です。足し算の結果やスカラー倍の結果がまた同じ集合に入る(閉じている)ことが重要です。

公理的な定義

体 $\mathbb{F}$(通常は実数 $\mathbb{R}$ または複素数 $\mathbb{C}$)上のベクトル空間 $V$ とは、集合 $V$ に2つの演算が定義されたものです。

  1. 加法: $V \times V \to V$, $(\bm{u}, \bm{v}) \mapsto \bm{u} + \bm{v}$
  2. スカラー倍: $\mathbb{F} \times V \to V$, $(\alpha, \bm{v}) \mapsto \alpha \bm{v}$

これらが以下の8つの公理を満たすとき、$V$ をベクトル空間と呼びます。

加法に関する4つの公理

任意の $\bm{u}, \bm{v}, \bm{w} \in V$ に対して、

(V1) 交換法則:

$$ \bm{u} + \bm{v} = \bm{v} + \bm{u} $$

(V2) 結合法則:

$$ (\bm{u} + \bm{v}) + \bm{w} = \bm{u} + (\bm{v} + \bm{w}) $$

(V3) 零ベクトルの存在: ある $\bm{0} \in V$ が存在して、

$$ \bm{v} + \bm{0} = \bm{v} \quad \forall \bm{v} \in V $$

(V4) 逆元の存在: 任意の $\bm{v} \in V$ に対して $-\bm{v} \in V$ が存在して、

$$ \bm{v} + (-\bm{v}) = \bm{0} $$

スカラー倍に関する4つの公理

任意の $\alpha, \beta \in \mathbb{F}$, $\bm{u}, \bm{v} \in V$ に対して、

(V5) 分配法則1:

$$ \alpha(\bm{u} + \bm{v}) = \alpha\bm{u} + \alpha\bm{v} $$

(V6) 分配法則2:

$$ (\alpha + \beta)\bm{v} = \alpha\bm{v} + \beta\bm{v} $$

(V7) 結合法則:

$$ \alpha(\beta\bm{v}) = (\alpha\beta)\bm{v} $$

(V8) 単位元:

$$ 1 \cdot \bm{v} = \bm{v} $$

具体的なベクトル空間の例

例1: $\mathbb{R}^n$

$n$ 次元実数ベクトル全体の集合 $\mathbb{R}^n$ は最も標準的なベクトル空間です。加法とスカラー倍は成分ごとに行います。

$$ (x_1, \dots, x_n) + (y_1, \dots, y_n) = (x_1 + y_1, \dots, x_n + y_n) $$

$$ \alpha(x_1, \dots, x_n) = (\alpha x_1, \dots, \alpha x_n) $$

例2: 多項式の空間

次数が $n$ 以下の多項式全体の集合 $P_n$ もベクトル空間です。

$$ P_n = \{a_0 + a_1 x + a_2 x^2 + \cdots + a_n x^n \mid a_i \in \mathbb{R}\} $$

零ベクトルは零多項式 $0$、加法は多項式の足し算、スカラー倍は係数の定数倍です。

例3: 行列の空間

$m \times n$ 行列全体の集合 $M_{m \times n}(\mathbb{R})$ もベクトル空間です。

例4: 関数の空間

区間 $[a, b]$ 上の連続関数全体の集合 $C[a, b]$ もベクトル空間です。この場合のベクトルは関数であり、加法は関数の足し算 $(f + g)(x) = f(x) + g(x)$、スカラー倍は $(\alpha f)(x) = \alpha f(x)$ です。

ベクトル空間でない例

$\mathbb{R}^2$ の第1象限 $\{(x, y) \mid x \geq 0, y \geq 0\}$ はベクトル空間ではありません。逆元の公理(V4)を満たさないからです。例えば $(1, 1)$ の逆元 $(-1, -1)$ は第1象限に含まれません。

部分空間

定義

ベクトル空間 $V$ の部分集合 $W \subseteq V$ が部分空間(subspace)であるとは、$W$ 自身が $V$ と同じ演算に関してベクトル空間になることです。

部分空間の判定条件

$W \subseteq V$ が部分空間であるための必要十分条件は次の3つです。

  1. $\bm{0} \in W$(零ベクトルを含む)
  2. $\bm{u}, \bm{v} \in W \Rightarrow \bm{u} + \bm{v} \in W$(加法について閉じている)
  3. $\alpha \in \mathbb{F}, \bm{v} \in W \Rightarrow \alpha\bm{v} \in W$(スカラー倍について閉じている)

条件2と3をまとめて、$\alpha\bm{u} + \beta\bm{v} \in W$(線形結合について閉じている)と1つの条件にすることもできます。

部分空間の例

$\mathbb{R}^3$ の部分空間の例:

  • $\{\bm{0}\}$: 零ベクトルだけの集合(自明な部分空間)
  • 原点を通る直線: $\{t\bm{v} \mid t \in \mathbb{R}\}$(1次元部分空間)
  • 原点を通る平面: $\{s\bm{u} + t\bm{v} \mid s, t \in \mathbb{R}\}$(2次元部分空間)
  • $\mathbb{R}^3$ 全体(自明な部分空間)

線形結合と生成系

ベクトル $\bm{v}_1, \dots, \bm{v}_k$ の線形結合は、

$$ \alpha_1 \bm{v}_1 + \alpha_2 \bm{v}_2 + \cdots + \alpha_k \bm{v}_k $$

です。すべての線形結合の集合を生成される部分空間(span)と呼び、

$$ \mathrm{span}\{\bm{v}_1, \dots, \bm{v}_k\} = \left\{\sum_{i=1}^{k} \alpha_i \bm{v}_i \mid \alpha_i \in \mathbb{F}\right\} $$

と表します。

Pythonでの可視化

$\mathbb{R}^3$ の部分空間の可視化

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(15, 5))

# (1) 1次元部分空間(直線)
ax1 = fig.add_subplot(131, projection='3d')
v = np.array([1, 2, 1])
t = np.linspace(-2, 2, 100)
line = np.outer(t, v)
ax1.plot(line[:, 0], line[:, 1], line[:, 2], 'b-', linewidth=2)
ax1.quiver(0, 0, 0, *v, color='r', arrow_length_ratio=0.1, linewidth=2)
ax1.set_title('1D subspace (line)')
ax1.set_xlabel('$x$')
ax1.set_ylabel('$y$')
ax1.set_zlabel('$z$')

# (2) 2次元部分空間(平面)
ax2 = fig.add_subplot(132, projection='3d')
u = np.array([1, 0, 1])
w = np.array([0, 1, 1])
s = np.linspace(-2, 2, 20)
S, T = np.meshgrid(s, s)
X = S * u[0] + T * w[0]
Y = S * u[1] + T * w[1]
Z = S * u[2] + T * w[2]
ax2.plot_surface(X, Y, Z, alpha=0.3, color='cyan')
ax2.quiver(0, 0, 0, *u, color='r', arrow_length_ratio=0.1, linewidth=2)
ax2.quiver(0, 0, 0, *w, color='g', arrow_length_ratio=0.1, linewidth=2)
ax2.set_title('2D subspace (plane)')
ax2.set_xlabel('$x$')
ax2.set_ylabel('$y$')
ax2.set_zlabel('$z$')

# (3) ベクトル空間でない例(半直線)
ax3 = fig.add_subplot(133, projection='3d')
v = np.array([1, 1, 1])
t_pos = np.linspace(0, 2, 50)
t_neg = np.linspace(-2, 0, 50)
line_pos = np.outer(t_pos, v)
line_neg = np.outer(t_neg, v)
ax3.plot(line_pos[:, 0], line_pos[:, 1], line_pos[:, 2], 'b-', linewidth=2, label='included')
ax3.plot(line_neg[:, 0], line_neg[:, 1], line_neg[:, 2], 'r--', linewidth=2, label='not included')
ax3.set_title('NOT a subspace (half-line)')
ax3.set_xlabel('$x$')
ax3.set_ylabel('$y$')
ax3.set_zlabel('$z$')
ax3.legend(fontsize=8)

plt.tight_layout()
plt.savefig('subspaces.png', dpi=150, bbox_inches='tight')
plt.show()

spanの可視化

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 2次元での span
v1 = np.array([1, 2])
v2 = np.array([2, 1])

# span{v1} = 直線
ax = axes[0]
t = np.linspace(-3, 3, 100)
line = np.outer(t, v1)
ax.plot(line[:, 0], line[:, 1], 'b-', linewidth=2, label='span$\\{\\mathbf{v}_1\\}$')
ax.quiver(0, 0, *v1, angles='xy', scale_units='xy', scale=1, color='r', width=0.015)
ax.text(v1[0] + 0.1, v1[1] + 0.1, '$\\mathbf{v}_1$', fontsize=14, color='r')
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_aspect('equal')
ax.set_title('span$\\{\\mathbf{v}_1\\}$: 1D subspace')
ax.grid(True, alpha=0.3)
ax.legend()
ax.axhline(y=0, color='k', linewidth=0.5)
ax.axvline(x=0, color='k', linewidth=0.5)

# span{v1, v2} = R^2 全体(一次独立な場合)
ax = axes[1]
# ランダムな線形結合をプロット
np.random.seed(42)
coeffs = np.random.uniform(-2, 2, (500, 2))
points = coeffs @ np.array([v1, v2])
ax.scatter(points[:, 0], points[:, 1], alpha=0.3, s=10, c='blue')
ax.quiver(0, 0, *v1, angles='xy', scale_units='xy', scale=1, color='r', width=0.015, zorder=5)
ax.quiver(0, 0, *v2, angles='xy', scale_units='xy', scale=1, color='g', width=0.015, zorder=5)
ax.text(v1[0] + 0.1, v1[1] + 0.1, '$\\mathbf{v}_1$', fontsize=14, color='r')
ax.text(v2[0] + 0.1, v2[1] + 0.1, '$\\mathbf{v}_2$', fontsize=14, color='g')
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.set_aspect('equal')
ax.set_title('span$\\{\\mathbf{v}_1, \\mathbf{v}_2\\} = \\mathbb{R}^2$')
ax.grid(True, alpha=0.3)
ax.axhline(y=0, color='k', linewidth=0.5)
ax.axvline(x=0, color='k', linewidth=0.5)

plt.tight_layout()
plt.savefig('span_visualization.png', dpi=150, bbox_inches='tight')
plt.show()

まとめ

本記事では、ベクトル空間の定義と公理について解説しました。

  • ベクトル空間: 加法とスカラー倍が定義された集合で、8つの公理を満たすもの
  • 具体例: $\mathbb{R}^n$、多項式の空間、行列の空間、関数の空間
  • 部分空間: 零ベクトルを含み、加法とスカラー倍について閉じた部分集合
  • span: ベクトルの線形結合全体で生成される部分空間

ベクトル空間の概念を理解したら、次は基底と次元の概念に進みましょう。