第2章:向量空间基础理论
10/7/25About 9 min
第2章:向量空间基础理论
学习目标
- 深入理解向量的定义和几何意义
- 掌握向量的基本运算(加法、数乘)
- 理解向量空间的公理化定义
- 掌握子空间的概念和判定方法
- 理解零向量和负向量的作用
向量的深入理解
向量的数学定义
向量是一个有序的数组,通常表示为:
其中 是向量的第 个分量。
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()向量的模长公式
对于 维向量 ,其模长(范数)定义为:
向量的基本运算
向量加法
两个向量的加法定义为对应分量的相加:
# 向量加法示例
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()标量乘法(数乘)
标量与向量的乘法定义为:
# 标量乘法示例
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}")标量乘法的几何意义
- : 向量被拉长,方向不变
- : 向量被缩短,方向不变
- : 向量变为零向量
- : 向量方向相反,长度被缩放 倍
向量空间的公理化定义
向量空间(线性空间)是一个集合 ,其元素称为向量,满足以下公理:
加法公理
设 :
- 封闭性:
- 交换律:
- 结合律:
- 零元素: 存在 ,使得
- 负元素: 对每个 ,存在 ,使得
数乘公理
设 为标量,:
- 封闭性:
- 分配律1:
- 分配律2:
- 结合律:
- 单位元:
# 验证向量空间公理
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")子空间理论
子空间的定义
向量空间 的子集 称为 的子空间,如果 本身也是向量空间。
子空间判定定理
是 的子空间当且仅当:
- (包含零向量)
- 对任意 ,有 (加法封闭)
- 对任意 ,,有 (数乘封闭)
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)常见子空间类型
零向量和负向量的重要性
零向量的性质
零向量 是向量空间中的特殊元素:
# 零向量的性质演示
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个判定条件 | 包含零向量、运算封闭 |
| 零向量 | 加法单位元 | 唯一性、中性作用 |
| 负向量 | 加法逆元 | 每个向量都有唯一负向量 |
重要提醒
- 向量空间的公理是抽象的,但适用于各种具体的数学对象
- 子空间必须包含零向量,这是判定的必要条件
- 理解几何直观有助于掌握抽象概念
通过本章学习,我们建立了严格的向量空间理论基础,为后续学习线性相关性、基与维数等概念做好了准备。
