第2章:向量空间基础理论

Haiyue
11min

第2章:向量空间基础理论

学习目标
  • 深入理解向量的定义和几何意义
  • 掌握向量的基本运算(加法、数乘)
  • 理解向量空间的公理化定义
  • 掌握子空间的概念和判定方法
  • 理解零向量和负向量的作用

向量的深入理解

向量的数学定义

向量是一个有序的数组,通常表示为: v=[v1v2vn]\mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix}

其中 viv_i 是向量的第 ii 个分量。

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

# 不同维度的向量示例
v_1d = np.array([5])                    # 一维向量
v_2d = np.array([3, 4])                 # 二维向量
v_3d = np.array([1, 2, 3])              # 三维向量
v_nd = np.array([1, -2, 0, 5, 3, -1])   # 高维向量

print(f"一维向量: {v_1d}")
print(f"二维向量: {v_2d}")
print(f"三维向量: {v_3d}")
print(f"六维向量: {v_nd}")

向量的几何表示

# 二维向量的几何表示
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 位置向量
v1 = np.array([3, 2])
v2 = np.array([-2, 3])
v3 = np.array([1, -2])

# 第一个子图:多个向量
axes[0].quiver(0, 0, v1[0], v1[1], angles='xy', scale_units='xy', scale=1,
               color='red', width=0.005, label='v1=(3,2)')
axes[0].quiver(0, 0, v2[0], v2[1], angles='xy', scale_units='xy', scale=1,
               color='blue', width=0.005, label='v2=(-2,3)')
axes[0].quiver(0, 0, v3[0], v3[1], angles='xy', scale_units='xy', scale=1,
               color='green', width=0.005, label='v3=(1,-2)')

axes[0].set_xlim(-3, 4)
axes[0].set_ylim(-3, 4)
axes[0].grid(True, alpha=0.3)
axes[0].legend()
axes[0].set_title('不同方向的向量')
axes[0].set_xlabel('x')
axes[0].set_ylabel('y')

# 第二个子图:向量的模长
v = np.array([4, 3])
magnitude = np.linalg.norm(v)

axes[1].quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1,
               color='purple', width=0.008, label=f'v=({v[0]},{v[1]})')
axes[1].plot([0, v[0]], [0, v[1]], 'purple', linewidth=2)
axes[1].text(v[0]/2, v[1]/2 + 0.3, f'|v| = {magnitude:.2f}',
             fontsize=12, ha='center')

axes[1].set_xlim(-1, 5)
axes[1].set_ylim(-1, 4)
axes[1].grid(True, alpha=0.3)
axes[1].legend()
axes[1].set_title('向量的模长')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')

plt.tight_layout()
plt.show()
向量的模长公式

对于 nn 维向量 v=[v1,v2,...,vn]\mathbf{v} = [v_1, v_2, ..., v_n],其模长(范数)定义为: v=v12+v22+...+vn2\|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + ... + v_n^2}

向量的基本运算

向量加法

两个向量的加法定义为对应分量的相加: u+v=[u1+v1u2+v2un+vn]\mathbf{u} + \mathbf{v} = \begin{bmatrix} u_1 + v_1 \\ u_2 + v_2 \\ \vdots \\ u_n + v_n \end{bmatrix}

# 向量加法示例
u = np.array([2, 1])
v = np.array([1, 3])
result = u + v

print(f"向量 u: {u}")
print(f"向量 v: {v}")
print(f"u + v: {result}")

# 向量加法的几何表示(平行四边形法则)
plt.figure(figsize=(8, 6))

# 绘制向量u
plt.arrow(0, 0, u[0], u[1], head_width=0.1, head_length=0.1,
          fc='red', ec='red', label='u')
# 绘制向量v
plt.arrow(0, 0, v[0], v[1], head_width=0.1, head_length=0.1,
          fc='blue', ec='blue', label='v')
# 绘制向量v从u的终点开始
plt.arrow(u[0], u[1], v[0], v[1], head_width=0.1, head_length=0.1,
          fc='blue', ec='blue', linestyle='--', alpha=0.7)
# 绘制向量u从v的终点开始
plt.arrow(v[0], v[1], u[0], u[1], head_width=0.1, head_length=0.1,
          fc='red', ec='red', linestyle='--', alpha=0.7)
# 绘制结果向量
plt.arrow(0, 0, result[0], result[1], head_width=0.15, head_length=0.15,
          fc='green', ec='green', linewidth=2, label='u + v')

plt.grid(True, alpha=0.3)
plt.legend()
plt.xlim(-0.5, 4)
plt.ylim(-0.5, 5)
plt.title('向量加法的几何表示')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

标量乘法(数乘)

标量与向量的乘法定义为: cv=c[v1v2vn]=[cv1cv2cvn]c\mathbf{v} = c\begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} = \begin{bmatrix} cv_1 \\ cv_2 \\ \vdots \\ cv_n \end{bmatrix}

# 标量乘法示例
v = np.array([2, 1])
scalars = [-2, -1, 0.5, 1, 2]

plt.figure(figsize=(10, 6))

colors = ['red', 'orange', 'yellow', 'blue', 'green']
for i, c in enumerate(scalars):
    scaled_v = c * v
    plt.arrow(0, 0, scaled_v[0], scaled_v[1], head_width=0.1, head_length=0.1,
              fc=colors[i], ec=colors[i], label=f'{c}v')

plt.grid(True, alpha=0.3)
plt.legend()
plt.xlim(-5, 5)
plt.ylim(-3, 3)
plt.title('标量乘法的几何效果')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

# 数值计算
print("标量乘法结果:")
for c in scalars:
    result = c * v
    print(f"{c} * {v} = {result}")
标量乘法的几何意义
  • c>1c > 1: 向量被拉长,方向不变
  • 0<c<10 < c < 1: 向量被缩短,方向不变
  • c=0c = 0: 向量变为零向量
  • c<0c < 0: 向量方向相反,长度被缩放 c|c|

向量空间的公理化定义

向量空间(线性空间)是一个集合 VV,其元素称为向量,满足以下公理:

加法公理

u,v,wV\mathbf{u}, \mathbf{v}, \mathbf{w} \in V

  1. 封闭性: u+vV\mathbf{u} + \mathbf{v} \in V
  2. 交换律: u+v=v+u\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}
  3. 结合律: (u+v)+w=u+(v+w)(\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w})
  4. 零元素: 存在 0V\mathbf{0} \in V,使得 v+0=v\mathbf{v} + \mathbf{0} = \mathbf{v}
  5. 负元素: 对每个 vV\mathbf{v} \in V,存在 vV-\mathbf{v} \in V,使得 v+(v)=0\mathbf{v} + (-\mathbf{v}) = \mathbf{0}

数乘公理

a,ba, b 为标量,u,vV\mathbf{u}, \mathbf{v} \in V

  1. 封闭性: avVa\mathbf{v} \in V
  2. 分配律1: a(u+v)=au+ava(\mathbf{u} + \mathbf{v}) = a\mathbf{u} + a\mathbf{v}
  3. 分配律2: (a+b)v=av+bv(a + b)\mathbf{v} = a\mathbf{v} + b\mathbf{v}
  4. 结合律: (ab)v=a(bv)(ab)\mathbf{v} = a(b\mathbf{v})
  5. 单位元: 1v=v1\mathbf{v} = \mathbf{v}
# 验证向量空间公理
def verify_vector_space_axioms():
    # 定义一些向量
    u = np.array([1, 2, 3])
    v = np.array([4, 5, 6])
    w = np.array([7, 8, 9])
    zero = np.array([0, 0, 0])

    # 标量
    a, b = 2, 3

    print("验证向量空间公理:")
    print("=" * 40)

    # 加法交换律
    print(f"1. 交换律: u + v = {u + v}")
    print(f"           v + u = {v + u}")
    print(f"   相等? {np.array_equal(u + v, v + u)}")

    # 加法结合律
    print(f"\n2. 结合律: (u + v) + w = {(u + v) + w}")
    print(f"           u + (v + w) = {u + (v + w)}")
    print(f"   相等? {np.array_equal((u + v) + w, u + (v + w))}")

    # 零向量
    print(f"\n3. 零向量: u + 0 = {u + zero}")
    print(f"           u = {u}")
    print(f"   相等? {np.array_equal(u + zero, u)}")

    # 负向量
    neg_u = -u
    print(f"\n4. 负向量: u + (-u) = {u + neg_u}")
    print(f"   是否为零? {np.allclose(u + neg_u, zero)}")

    # 数乘分配律
    print(f"\n5. 数乘分配律1: a(u + v) = {a * (u + v)}")
    print(f"                au + av = {a * u + a * v}")
    print(f"   相等? {np.array_equal(a * (u + v), a * u + a * v)}")

    print(f"\n6. 数乘分配律2: (a + b)u = {(a + b) * u}")
    print(f"                au + bu = {a * u + b * u}")
    print(f"   相等? {np.array_equal((a + b) * u, a * u + b * u)}")

verify_vector_space_axioms()

向量空间的例子

常见的向量空间

# 1. R^n 空间 - n维实数向量空间
print("1. R^n 空间示例:")
R2_vectors = [np.array([1, 2]), np.array([3, -1]), np.array([0, 5])]
R3_vectors = [np.array([1, 2, 3]), np.array([4, 5, 6]), np.array([7, 8, 9])]

print("R^2 中的向量:", R2_vectors)
print("R^3 中的向量:", R3_vectors)

# 2. 多项式空间
print("\n2. 多项式空间 P_n:")
print("次数不超过2的多项式: {a + bx + cx^2 | a, b, c ∈ R}")
print("例如: 3 + 2x - x^2, 5x + 4x^2, 7 - 3x")

# 3. 矩阵空间
print("\n3. 矩阵空间 M_{m×n}:")
matrix_space_example = [
    np.array([[1, 2], [3, 4]]),
    np.array([[5, 6], [7, 8]]),
    np.array([[0, 1], [-1, 0]])
]
print("2×2矩阵空间中的元素:")
for i, matrix in enumerate(matrix_space_example):
    print(f"矩阵 {i+1}:\n{matrix}")

# 4. 函数空间
print("\n4. 函数空间:")
print("连续函数空间 C[0,1]: 在区间[0,1]上连续的所有函数")
print("例如: f(x) = x^2, g(x) = sin(x), h(x) = e^x")

子空间理论

子空间的定义

向量空间 VV 的子集 WW 称为 VV 的子空间,如果 WW 本身也是向量空间。

子空间判定定理

WWVV 的子空间当且仅当:

  1. 0W\mathbf{0} \in W(包含零向量)
  2. 对任意 u,vW\mathbf{u}, \mathbf{v} \in W,有 u+vW\mathbf{u} + \mathbf{v} \in W(加法封闭)
  3. 对任意 cRc \in \mathbb{R}vW\mathbf{v} \in W,有 cvWc\mathbf{v} \in W(数乘封闭)
def is_subspace(vectors, test_vectors=None):
    """
    检验给定向量组是否张成一个子空间
    """
    vectors = np.array(vectors)

    # 检查是否包含零向量
    zero_vector = np.zeros(vectors.shape[1])
    contains_zero = any(np.allclose(v, zero_vector) for v in vectors)

    print(f"包含零向量: {contains_zero}")

    # 检查加法封闭性(简单测试)
    if len(vectors) >= 2:
        v1, v2 = vectors[0], vectors[1]
        sum_vector = v1 + v2
        print(f"v1 + v2 = {sum_vector}")

    # 检查数乘封闭性
    if len(vectors) >= 1:
        v1 = vectors[0]
        scaled = 2 * v1
        print(f"2 * v1 = {scaled}")

    return contains_zero

# 示例1: R^3中通过原点的直线
print("示例1: 通过原点的直线 span{(1,2,3)}")
line_vectors = [np.array([0, 0, 0]), np.array([1, 2, 3]), np.array([2, 4, 6])]
is_subspace(line_vectors)

print("\n" + "="*50)

# 示例2: R^3中通过原点的平面
print("示例2: 通过原点的平面 span{(1,0,0), (0,1,0)}")
plane_vectors = [np.array([0, 0, 0]), np.array([1, 0, 0]),
                 np.array([0, 1, 0]), np.array([1, 1, 0])]
is_subspace(plane_vectors)

常见子空间类型

🔄 正在渲染 Mermaid 图表...

零向量和负向量的重要性

零向量的性质

零向量 0\mathbf{0} 是向量空间中的特殊元素:

# 零向量的性质演示
zero_2d = np.array([0, 0])
zero_3d = np.array([0, 0, 0])

v = np.array([3, 4])
w = np.array([1, 2, 3])

print("零向量的性质:")
print(f"1. v + 0 = {v} + {zero_2d} = {v + zero_2d}")
print(f"2. 0 + v = {zero_2d} + {v} = {zero_2d + v}")
print(f"3. 0 * v = 0 * {v} = {0 * v}")
print(f"4. ||0|| = {np.linalg.norm(zero_2d)}")

# 零向量在线性组合中的作用
a, b, c = 2, -3, 5
u1 = np.array([1, 0])
u2 = np.array([0, 1])
u3 = np.array([0, 0])  # 零向量

linear_comb = a * u1 + b * u2 + c * u3
print(f"\n线性组合: {a}*{u1} + {b}*{u2} + {c}*{u3} = {linear_comb}")

负向量的性质

# 负向量的性质演示
v = np.array([3, -2, 1])
neg_v = -v

print("负向量的性质:")
print(f"向量 v: {v}")
print(f"负向量 -v: {neg_v}")
print(f"v + (-v) = {v + neg_v}")
print(f"||v|| = {np.linalg.norm(v):.3f}")
print(f"||-v|| = {np.linalg.norm(neg_v):.3f}")

# 可视化正向量和负向量
plt.figure(figsize=(8, 6))
v_2d = np.array([3, 2])
neg_v_2d = -v_2d

plt.arrow(0, 0, v_2d[0], v_2d[1], head_width=0.2, head_length=0.2,
          fc='blue', ec='blue', label='v')
plt.arrow(0, 0, neg_v_2d[0], neg_v_2d[1], head_width=0.2, head_length=0.2,
          fc='red', ec='red', label='-v')

plt.grid(True, alpha=0.3)
plt.axis('equal')
plt.legend()
plt.xlim(-4, 4)
plt.ylim(-3, 3)
plt.title('向量与其负向量')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

本章小结

本章深入探讨了向量空间的基础理论:

概念核心内容重要性质
向量运算加法、数乘满足交换律、结合律、分配律
向量空间10个公理抽象化的线性结构
子空间3个判定条件包含零向量、运算封闭
零向量加法单位元唯一性、中性作用
负向量加法逆元每个向量都有唯一负向量
重要提醒
  • 向量空间的公理是抽象的,但适用于各种具体的数学对象
  • 子空间必须包含零向量,这是判定的必要条件
  • 理解几何直观有助于掌握抽象概念

通过本章学习,我们建立了严格的向量空间理论基础,为后续学习线性相关性、基与维数等概念做好了准备。