基底(basis)と次元(dimension)は、ベクトル空間の構造を理解するための最も重要な概念です。基底は「そのベクトル空間を生成するために必要な最小限のベクトルの組」であり、次元はその個数です。
基底の概念を理解すると、任意のベクトルを座標で表すことができるようになり、線形代数の議論がより明確になります。
本記事の内容
- 一次独立と一次従属
- 基底の定義と性質
- 次元の定義
- 座標と座標変換
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
一次独立と一次従属
一次独立の定義
ベクトル $\bm{v}_1, \bm{v}_2, \dots, \bm{v}_k$ が一次独立(linearly independent)であるとは、
$$ \alpha_1 \bm{v}_1 + \alpha_2 \bm{v}_2 + \cdots + \alpha_k \bm{v}_k = \bm{0} \Rightarrow \alpha_1 = \alpha_2 = \cdots = \alpha_k = 0 $$
が成り立つことをいいます。つまり、これらのベクトルの線形結合が零ベクトルになるのは、すべての係数が0のときに限るということです。
一次従属の定義
一次独立でないとき、すなわちすべてが0でない係数 $\alpha_1, \dots, \alpha_k$ が存在して
$$ \alpha_1 \bm{v}_1 + \alpha_2 \bm{v}_2 + \cdots + \alpha_k \bm{v}_k = \bm{0} $$
となるとき、$\bm{v}_1, \dots, \bm{v}_k$ は一次従属(linearly dependent)であるといいます。
幾何学的な意味
- 2つのベクトルが一次従属 = 平行(同じ直線上)
- 3つのベクトルが一次従属 = 同一平面上にある
判定方法
$\bm{v}_1, \dots, \bm{v}_k \in \mathbb{R}^n$ が一次独立かどうかは、これらを列ベクトルとする行列 $\bm{A} = (\bm{v}_1, \dots, \bm{v}_k)$ のランクで判定できます。
$$ \text{一次独立} \iff \mathrm{rank}(\bm{A}) = k $$
$k = n$ のとき(正方行列のとき)は、
$$ \text{一次独立} \iff \det(\bm{A}) \neq 0 $$
基底の定義
定義
ベクトル空間 $V$ のベクトルの組 $\{\bm{e}_1, \bm{e}_2, \dots, \bm{e}_n\}$ が $V$ の基底であるとは、以下の2条件を同時に満たすことです。
- 一次独立: $\bm{e}_1, \dots, \bm{e}_n$ は一次独立
- 生成系: $V = \mathrm{span}\{\bm{e}_1, \dots, \bm{e}_n\}$(任意の $\bm{v} \in V$ が $\bm{e}_1, \dots, \bm{e}_n$ の線形結合で表せる)
大雑把に言うと、基底は「必要最小限の生成系」であり、「最大限の一次独立系」でもあります。
$\mathbb{R}^n$ の標準基底
$\mathbb{R}^n$ の標準基底は、
$$ \bm{e}_1 = (1, 0, \dots, 0)^T, \quad \bm{e}_2 = (0, 1, \dots, 0)^T, \quad \dots, \quad \bm{e}_n = (0, 0, \dots, 1)^T $$
です。
基底は一意ではない
1つのベクトル空間に対して基底は無数に存在します。例えば $\mathbb{R}^2$ では、
$$ \left\{\begin{pmatrix} 1 \\ 0 \end{pmatrix}, \begin{pmatrix} 0 \\ 1 \end{pmatrix}\right\}, \quad \left\{\begin{pmatrix} 1 \\ 1 \end{pmatrix}, \begin{pmatrix} 1 \\ -1 \end{pmatrix}\right\}, \quad \left\{\begin{pmatrix} 2 \\ 1 \end{pmatrix}, \begin{pmatrix} 1 \\ 3 \end{pmatrix}\right\} $$
はいずれも $\mathbb{R}^2$ の基底です。
次元の定義
定義
ベクトル空間 $V$ の次元 $\dim V$ は、$V$ の基底に含まれるベクトルの個数です。
$$ \dim V = n \quad (\text{基底が } n \text{ 個のベクトルからなるとき}) $$
次元の一意性
重要な定理として、同じベクトル空間の任意の2つの基底は同じ個数のベクトルを含みます。したがって、次元は基底の選び方によらず一意に定まります。
次元の例
| ベクトル空間 | 次元 |
|---|---|
| $\mathbb{R}^n$ | $n$ |
| $n$ 次以下の多項式 $P_n$ | $n + 1$ |
| $m \times n$ 行列 $M_{m \times n}$ | $mn$ |
| $\{\bm{0}\}$ | $0$ |
座標
基底 $B = \{\bm{e}_1, \dots, \bm{e}_n\}$ を固定すると、任意のベクトル $\bm{v} \in V$ は
$$ \bm{v} = x_1 \bm{e}_1 + x_2 \bm{e}_2 + \cdots + x_n \bm{e}_n $$
と一意に表せます。この $(x_1, x_2, \dots, x_n)^T$ を基底 $B$ に関する $\bm{v}$ の座標と呼びます。
座標が一意に定まることは、基底が一次独立であること(表し方の一意性)と生成系であること(表せること)の両方から従います。
次元に関する重要な定理
次元定理(ランク・ナリティの定理)
線形写像 $T: V \to W$ に対して、
$$ \dim V = \dim \mathrm{Ker}(T) + \dim \mathrm{Im}(T) $$
つまり $\dim V = \text{nullity} + \text{rank}$ です。
部分空間の次元
$W$ が $V$ の部分空間ならば、$\dim W \leq \dim V$ です。等号が成り立つのは $W = V$ のときに限ります。
Pythonでの可視化
一次独立と一次従属の可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 一次独立な2ベクトル
ax = axes[0]
v1 = np.array([1, 2])
v2 = np.array([2, 1])
ax.quiver(0, 0, *v1, angles='xy', scale_units='xy', scale=1, color='r', width=0.02)
ax.quiver(0, 0, *v2, angles='xy', scale_units='xy', scale=1, color='b', width=0.02)
ax.text(v1[0] + 0.1, v1[1] + 0.1, '$\\mathbf{v}_1 = (1,2)$', fontsize=12, color='r')
ax.text(v2[0] + 0.1, v2[1] - 0.3, '$\\mathbf{v}_2 = (2,1)$', fontsize=12, color='b')
ax.set_xlim(-1, 4)
ax.set_ylim(-1, 4)
ax.set_aspect('equal')
ax.set_title('Linearly Independent')
ax.grid(True, alpha=0.3)
ax.axhline(y=0, color='k', linewidth=0.5)
ax.axvline(x=0, color='k', linewidth=0.5)
# 一次従属な2ベクトル
ax = axes[1]
v1 = np.array([1, 2])
v2 = np.array([2, 4]) # v2 = 2*v1
ax.quiver(0, 0, *v1, angles='xy', scale_units='xy', scale=1, color='r', width=0.02)
ax.quiver(0, 0, *v2, angles='xy', scale_units='xy', scale=1, color='b', width=0.02)
ax.text(v1[0] + 0.1, v1[1] + 0.1, '$\\mathbf{v}_1 = (1,2)$', fontsize=12, color='r')
ax.text(v2[0] + 0.1, v2[1] - 0.3, '$\\mathbf{v}_2 = (2,4)$', fontsize=12, color='b')
ax.set_xlim(-1, 5)
ax.set_ylim(-1, 5)
ax.set_aspect('equal')
ax.set_title('Linearly Dependent ($\\mathbf{v}_2 = 2\\mathbf{v}_1$)')
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('linear_independence.png', dpi=150, bbox_inches='tight')
plt.show()
基底の変換と座標の可視化
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
v = np.array([3, 2])
# 標準基底での座標
ax = axes[0]
e1 = np.array([1, 0])
e2 = np.array([0, 1])
ax.quiver(0, 0, *e1, angles='xy', scale_units='xy', scale=1, color='gray', width=0.015, alpha=0.7)
ax.quiver(0, 0, *e2, angles='xy', scale_units='xy', scale=1, color='gray', width=0.015, alpha=0.7)
ax.quiver(0, 0, *v, angles='xy', scale_units='xy', scale=1, color='red', width=0.02)
# 座標の分解を表示
ax.plot([3, 3], [0, 2], 'k--', alpha=0.3)
ax.plot([0, 3], [2, 2], 'k--', alpha=0.3)
ax.text(3.2, 1, '$\\mathbf{v} = 3\\mathbf{e}_1 + 2\\mathbf{e}_2$', fontsize=11, color='red')
ax.text(0.5, -0.3, '$\\mathbf{e}_1$', fontsize=12, color='gray')
ax.text(-0.3, 0.5, '$\\mathbf{e}_2$', fontsize=12, color='gray')
ax.set_xlim(-1, 5)
ax.set_ylim(-1, 4)
ax.set_aspect('equal')
ax.set_title('Standard basis')
ax.grid(True, alpha=0.3)
ax.axhline(y=0, color='k', linewidth=0.5)
ax.axvline(x=0, color='k', linewidth=0.5)
# 別の基底での座標
ax = axes[1]
b1 = np.array([1, 1])
b2 = np.array([1, -1])
# v = a*b1 + b*b2 を解く
B = np.column_stack([b1, b2])
coords = np.linalg.solve(B, v) # [2.5, 0.5]
ax.quiver(0, 0, *b1, angles='xy', scale_units='xy', scale=1, color='gray', width=0.015, alpha=0.7)
ax.quiver(0, 0, *b2, angles='xy', scale_units='xy', scale=1, color='gray', width=0.015, alpha=0.7)
ax.quiver(0, 0, *v, angles='xy', scale_units='xy', scale=1, color='red', width=0.02)
# 座標の分解
ax.quiver(0, 0, *(coords[0]*b1), angles='xy', scale_units='xy', scale=1, color='blue',
width=0.01, alpha=0.5)
ax.quiver(*(coords[0]*b1), *(coords[1]*b2), angles='xy', scale_units='xy', scale=1,
color='green', width=0.01, alpha=0.5)
ax.text(3.2, 1, f'$\\mathbf{{v}} = {coords[0]:.1f}\\mathbf{{b}}_1 + {coords[1]:.1f}\\mathbf{{b}}_2$',
fontsize=11, color='red')
ax.text(0.5, 0.7, '$\\mathbf{b}_1$', fontsize=12, color='gray')
ax.text(0.7, -0.5, '$\\mathbf{b}_2$', fontsize=12, color='gray')
ax.set_xlim(-1, 5)
ax.set_ylim(-2, 4)
ax.set_aspect('equal')
ax.set_title('New basis $\\{\\mathbf{b}_1, \\mathbf{b}_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('basis_coordinates.png', dpi=150, bbox_inches='tight')
plt.show()
一次独立性の判定
import numpy as np
def check_linear_independence(vectors):
"""ベクトルの組が一次独立かどうかを判定する"""
A = np.column_stack(vectors)
rank = np.linalg.matrix_rank(A)
n = len(vectors)
if rank == n:
print(f"一次独立 (rank = {rank} = ベクトル数 {n})")
else:
print(f"一次従属 (rank = {rank} < ベクトル数 {n})")
return rank == n
# テスト
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
v3 = np.array([7, 8, 9])
print("v1, v2, v3:")
check_linear_independence([v1, v2, v3])
# v3 = 2*v2 - v1 なので一次従属
v3_new = np.array([7, 8, 0])
print("\nv1, v2, v3_new:")
check_linear_independence([v1, v2, v3_new])
まとめ
本記事では、基底と次元の定義について解説しました。
- 一次独立: 線形結合が零ベクトルになるのは全係数が0のときのみ
- 基底: 一次独立かつ生成系であるベクトルの組
- 次元: 基底のベクトルの個数(基底の選び方によらない)
- 座標: 基底を固定すると各ベクトルが一意の座標を持つ
- 次元定理: $\dim V = \text{nullity} + \text{rank}$
基底と次元は線形代数のあらゆる議論の土台となる概念です。次のステップとして、固有値・固有ベクトルについて学ぶと、線形代数の応用がさらに広がります。