向量空间简介

avatar
作者
筋斗云
阅读量:0

向量空间

定义1

向量空间是一个集合 V V V,该集合的元素都是向量,定义了加法和标量乘法,则向量空间满足:

  • 集合 V V V对加法运算封闭,即集合 V V V中的任意向量 P P P Q Q Q,它们的和 P + Q P+Q P+Q也是集合 V V V的向量
  • 集合 V V V对标量乘法运算封闭,即对于任意实数 a a a和集合 V V V中的任意向量 P P P,它们的积 a P aP aP也是集合 V V V的向量
  • 集合 V V V中存在0向量,即对于集合 V V V中的任意向量 P P P,有 P + 0 = 0 + P = P P+0 = 0+P= P P+0=0+P=P成立
  • 对于集合 V V V中的任意向量 P P P,在集合 V V V中存在向量 Q Q Q,使 P + Q = 0 P+Q = 0 P+Q=0
  • 集合 V V V中的向量满足结合律,即对于集合 V V V中的任意向量 P P P Q Q Q R R R ( P + Q ) + R = P + ( Q + R ) (P+Q)+R = P+(Q+R) (P+Q)+R=P+(Q+R)成立
  • 标量乘法满足结合律,即对于任意实数 a a a b b b,以及集合 V V V中的任意向量 P P P a b P = a ( b P ) abP = a(bP) abP=a(bP)成立
  • 标量与向量和的乘法满足分配律,即对于任意实数 a a a,以及集合 V V V中的任意向量 P P P Q Q Q a ( P + Q ) = a P + a Q a(P+Q) = aP+aQ a(P+Q)=aP+aQ成立
  • 标量和与向量的乘法满足分配律,即对于任意实数 a a a b b b,以及集合 V V V中的任意向量 P P P ( a + b ) P = a P + b P (a+b)P = aP+bP (a+b)P=aP+bP成立

定义2

对于含有 n n n个向量的集合 { e 1 , e 2 , ⋯   , e n } \{e_1,e_2,\cdots,e_n\} {e1,e2,,en},如果不存在不全为0的数 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an,使等式
a 1 e 1 + a 2 e 2 + ⋯ + a n e n = 0 a_1e_1+a_2e_2+\dots+a_ne_n=0 a1e1+a2e2++anen=0
成立,则称向量集合线性无关,否则称为线性相关

一个 n n n维向量空间可以由 n n n个线性无关向量的集合生成,生成向量空间的线性无关向量的集合称为线性空间的基

定义3

向量空间 V V V的基 B \mathcal{B} B n n n个线性无关向量的集合, B = { e 1 , e 2 , ⋯   , e n } \mathcal{B}=\{e_1,e_2,\cdots,e_n\} B={e1,e2,,en},对于向量空间中的任意向量 P P P,存在一组实数 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an,使
P = a 1 e 1 + a 2 e 2 + ⋯ + a n e n P =a_1e_1+a_2e_2+\dots+a_ne_n P=a1e1+a2e2++anen
成立

一个 n n n维向量空间有无穷多个基,每个基中有且仅有 n n n个向量

定义4

向量空间的基 B \mathcal{B} B中,如果任意两个向量 e i e_i ei e j e_j ej i ≠ j i\neq j i=j,且 e i ⋅ e j = 0 e_i\cdot e_j=0 eiej=0,则基 B \mathcal{B} B称为向量空间的正交基

对于向量空间的正交基,如果其中每个向量的长度都为1,则称为规范正交基

规范正交基使用克罗内克函数函数表示

在数学中,克罗内克函数(又称克罗内克 δ \delta δ函数、克罗内克 δ \delta δ)是一个二元函数,得名于德国数学家利奥波德·克罗内克。克罗内克函数的自变量(输入值)一般是两个整数,如果两者相等,则其输出值为1,否则为0。

克罗内克函数使用符号 δ i j \delta_{ij} δij表示
δ i j = { 1 ,如果 i = j 0 ,如果 i ≠ j \delta_{ij}= \begin{cases} 1,如果i=j\\ 0,如果i\neq j \end{cases} δij={1,如果i=j0,如果i=j

定义5

向量空间的基 B = { e 1 , e 2 , ⋯   , e n } \mathcal{B}=\{e_1,e_2,\cdots,e_n\} B={e1,e2,,en}中,如果任意两个向量 e i e_i ei e j e_j ej i ≠ j i\neq j i=j,且 e i ⋅ e j = δ i j e_i\cdot e_j=\delta_{ij} eiej=δij,则基 B \mathcal{B} B称为向量空间的规范正交基

基到正交基的变换

最后给出向量空间基到正交基的Gram-Schmidt 正交化算法
向量空间的基 B = { e 1 , e 2 , ⋯   , e n } \mathcal{B}=\{e_1,e_2,\cdots,e_n\} B={e1,e2,,en},计算后的向量空间的基 B ′ = { e 1 ′ , e 2 ′ , ⋯   , e n ′ } \mathcal{B}^{'}=\{e_1^{'},e_2^{'},\cdots,e_n^{'}\} B={e1,e2,,en}

  1. e 1 ′ = e 1 e_1^{'} = e_1 e1=e1
  2. i i i=2
  3. 从向量 e i e_i ei中减去向量在 e 1 ′ , e 2 ′ , ⋯   , e i − 1 ′ e_1^{'},e_2^{'},\cdots,e_{i-1}^{'} e1,e2,,ei1上的投影,结果保存到 e i ′ e_{i}^{'} ei
  4. 如果 i < n i<n i<n, i i i加1,转到步骤3

向量 e i e_i ei在向量 e ′ e^{'} e上的投影利用点乘即可计算
e i ′ = e i ⋅ e ′ ∣ e ′ ∣ e ′ ∣ e ′ ∣ = e i ⋅ e ′ e ′ ⋅ e ′ e ′ e_{i}^{'} = \frac{e_i\cdot e^{'}}{|e^{'}|}\frac{e^{'}}{|e^{'}|} = \frac{e_i\cdot e^{'}}{e^{'}\cdot e^{'}}e^{'} ei=eeieee=eeeiee

我们以三维空间为例,给出基到正交基的C语言实现

#include <stdio.h> #include <string.h> // 向量点乘,n表示维度 float dot(const float* v1, const float* v2, int n);  // 向量相加:desm表示des的系数,srcm表示src的系数,n表示维度 void add(float* des, float desm, const float* src, float srcm, int n);  //Gram-Schmidt算法,n表示维度 void gramSchmidt(float* des, const float* src, int n);  int main(void) {     float a1[9] = {1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0};     float a2[9] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};     gramSchmidt(a2, a1, 3);     return 0; }  float dot(const float* v1, const float* v2, int n) {     // 这里应该使用simd运算     float res = 0;     for(int i = 0; i < n; i++)     {         res += (*(v1 + i)) * (*(v2 + i));     }     return res; }  void add(float* des, float desm, const float* src, float srcm, int n) {     for(int i = 0; i < n; i++)     {         *(des + i) = (*(des + i)) * desm +  (*(src + i)) * srcm;     } }  void gramSchmidt(float* des, const float* src, int n) {     int perSize = n * sizeof(float);     memcpy(des, src, perSize);     if(n <= 1)     {         return;     }     for(int i = 1; i < n; i++)     {         memcpy(des + n * i, src + n * i, perSize);         for(int j = 0; j < i; j++)         {             float a1 = dot(des + n * i, des + n * j, n);             float a2 = dot(des + n * j, des + n * j, n);             add(des + n * i, 1, des + n * j, -(a1 / a2), n);         }     } } 

我们使用三维向量
[ 1.0 , 0.0 , 0.0 ] [1.0, 0.0, 0.0] [1.0,0.0,0.0]
[ 1.0 , 1.0 , 0.0 ] [1.0, 1.0, 0.0] [1.0,1.0,0.0]
[ 1.0 , 1.0 , 1.0 ] [1.0, 1.0, 1.0] [1.0,1.0,1.0]

经过算法后得到三维正交基向量
[ 1.0 , 0.0 , 0.0 ] [1.0, 0.0, 0.0] [1.0,0.0,0.0]
[ 0.0 , 1.0 , 0.0 ] [0.0, 1.0, 0.0] [0.0,1.0,0.0]
[ 0.0 , 0.0 , 1.0 ] [0.0, 0.0, 1.0] [0.0,0.0,1.0]

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!