基底と次元の定義をわかりやすく解説

基底(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条件を同時に満たすことです。

  1. 一次独立: $\bm{e}_1, \dots, \bm{e}_n$ は一次独立
  2. 生成系: $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}$

基底と次元は線形代数のあらゆる議論の土台となる概念です。次のステップとして、固有値・固有ベクトルについて学ぶと、線形代数の応用がさらに広がります。