1.向量基础概念回顾
1.1.向量的几何含义
向量对于大家而言一定不陌生,他的概念很简单,把数字排成一行或一列就是向量。他是描述空间的有力工具。
比如二维向量:
[
4
5
]
\begin{bmatrix} 4\\5 \end{bmatrix}
[45],他有两个成分:第一个成分是
4
4
4,第二个成分是
5
5
5。一方面,我们可以把他理解成二维平面中
x
x
x坐标为
4
4
4,
y
y
y坐标为
5
5
5的一个点,也可以理解为以平面原点
(
0
,
0
)
(0,0)
(0,0)为起点,到目标终点
(
4
,
5
)
(4,5)
(4,5)的有向线段,如图1所示:
由此可见,向量中成分的个数就是向量的维数。因此,我们进一步推广下去,还会有三维向量,如: [ 3 2 4 ] \begin{bmatrix} 3\\2\\4 \end{bmatrix} ⎣⎡324⎦⎤ ,他用来表示三维空间中的一个点,或者在三维空间中以原点 ( 0 , 0 , 0 ) (0,0,0) (0,0,0)为起点,到目标终点 ( 3 , 2 , 4 ) (3,2,4) (3,2,4)的有向线段,如图2所示。当然,以此类推还有更高维的向量。
1.2.充当数据的载体
当然,向量不仅仅局限于描述空间中的点坐标和有向线段,他也可以作为描述事物属性的数据载体。比如一次考试中你的成绩为:语文 85 85 85分,数学 92 92 92分,外语 89 89 89分。由于这三门课分属于你的不同科目属性,因此我们可以使用一个三维向量对其进行表示: s c o r e = [ 85 92 89 ] score= \begin{bmatrix} 85\\92\\89 \end{bmatrix} score=⎣⎡859289⎦⎤ 。
又如,在自然语言处理中,程序在进行文本阅读时,首先就会进行文本分词,然后使用向量进行表示。这是因为向量很适合在高维空间中进行表达和处理。在本书后续章节中将接触到的投影、降维等概念,都是在向量的基础上实现的。
1.3.注意:我们一般使用列向量
根据刚才我们所讲的,把数字排成一行或一列就是向量。因此向量拥有两种表达方式:像 [ 4 5 ] \begin{bmatrix} 4\\5 \end{bmatrix} [45], [ − 4 15 6.7 ] \begin{bmatrix} -4\\15\\6.7 \end{bmatrix} ⎣⎡−4156.7⎦⎤这种元素竖排的,称为列向量,对应的元素横排的称为行向量,比如: [ 4 5 7 ] \begin{bmatrix} 4&5&7 \end{bmatrix} [457]。
我们在实际使用向量工具进行描述和计算的时候,具体使用哪一种方式呢?在没有特殊说明的情况下,我们提到向量,都是默认为列向量。在文字排版的时候,由于列向量比较占空间,也可以将其写成行向量的转置: [ − 4 15 6.7 ] T \begin{bmatrix} -4&15&6.7 \end{bmatrix}^{T} [−4156.7]T 。
如果我们从直觉上来看,似乎行向量更为直观,这里为什么如此偏爱列向量呢?这么做主要是为了方便后续的向量坐标变换、映射等计算。这里只简单提一句,大家有个直观印象就好:将一个矩阵 A A A所表示的线性映射作用于某向量 x x x时,我们习惯于将其写成矩阵乘以向量的形式: A x Ax Ax ,而这种写法的运算基础便是: x x x是一个列向量。这里一下子堆上来好几个概念,比如转置、矩阵、线性变换等等,都先不急着展开,后面会一一详细描述。这里就请先记住:一般我们都用列的形式来表示向量。
2.向量的 p y t h o n python python表示
2.1.表示成行向量
对应的,我们如何用 p y t h o n python python来表示行向量和列向量呢?这里我们需要使用 N u m p y Numpy Numpy工具包。
代码片段:
import numpy as np
A = np.array([1,2,3,4])
print(A)
运算结果:
[1 2 3 4]
p y t h o n python python中用 N u m p y Numpy Numpy库来生成一个向量,默认生成的是行向量,但正如我们上面所说的,一般情况下我们通常使用的是列向量,因此还需要对其做一些处理。
你的第一感觉可能会想,用一用转置这个概念(后面会详细讲解)是不是就可以了,也就是把向量的行索引和列索引交换位置,但是 N u m p y Numpy Numpy中的转置方法在一维向量里是无效的。
代码片段:
import numpy as np
A = np.array([1,2,3,4])
print(A.transpose())
运行结果:
[1 2 3 4]
我们发现,确实没有起到效果。
2.2.如何表示列向量
那我们应该如何来表示一个列向量呢?
这里我们要事先用一点后面的知识,我们把向量看作是一维的数组,但是也可以看做是行为 1 1 1或者列为 1 1 1的二维数组,用后面的内容来描述,即向量可以看作是特殊的矩阵。行向量是 1 × m 1\times m 1×m的矩阵,列向量是 n × 1 n\times 1 n×1的矩阵,我们用这个视角重新生成一个新的行向量和列向量。
代码片段:
import numpy as np
A = np.array([[1, 2, 3]])
print(A)
print(A.T)
运行结果:
[[1 2 3]]
[[1]
[2]
[3]]
在这段代码里,我们要注意:行向量初始化时,我们使用了Numpy库中的二维向量初始化方法,因此多嵌套了一层中括号,在这种情况下,我们就可以直接通过行向量转置的方法,来生成对应的列向量了。
3.运用向量进行运算
明确了向量的表示方法,那么接下来我们来梳理一下向量的基本运算,我们逐一介绍向量的加法、向量的数量积和向量间的乘法。
3.1.向量的加法
两个维数相同的向量才能进行加法运算,将相同位置上的元素相加即可,结果向量的维数保持不变:
[ u 1 u 2 u 3 ] T \begin{bmatrix} u_1&u_2&u_3 \end{bmatrix} ^{T} [u1u2u3]T + [ v 1 v 2 v 3 ] T \begin{bmatrix} v_1&v_2&v_3 \end{bmatrix} ^{T} [v1v2v3]T = [ u 1 + v 1 u 2 + v 2 u 3 + v 3 ] T =\begin{bmatrix} u_1+v_1&u_2+v_2&u_3+v_3 \end{bmatrix} ^{T} =[u1+v1u2+v2u3+v3]T
向量的加法运算很简单,我们具体来举个例子:
代码片段:
import numpy as np
u = np.array([[1,2,3]]).T
v = np.array([[5,6,7]]).T
print(u + v)
运行结果:
[[ 6]
[ 8]
[10]]
3.2.向量的数量乘法
向量的数量乘法就是将参与乘法运算的数和向量的每个元素分别相乘,结果向量保持维数不变,数量乘法就是将向量沿着所在直线的方向拉长到相应的倍数,方向和参与运算的数字的正负号相关:
c [ u 1 u 2 u 3 ] T \begin{bmatrix} u_1&u_2&u_3 \end{bmatrix} ^{T} [u1u2u3]T = [ c u 1 c u 2 c u 3 ] T =\begin{bmatrix} cu_1&cu_2&cu_3 \end{bmatrix} ^{T} =[cu1cu2cu3]T
代码片段:
import numpy as np
u = np.array([[1, 2, 3]]).T
print(3*u)
运行结果:
[[3]
[6]
[9]]
3.3.向量的内积
介绍完向量的加法和数量乘法,这里大家一定会问了,那向量和向量相乘呢?向量与向量的乘法分为所谓的点乘(内积)和叉乘(外积),我们先说内积。
向量 u u u和向量 v v v的内积定义如下:
u ⋅ v = [ u 1 u 2 u 3 ] T ⋅ [ v 1 v 2 v 3 ] T = u 1 v 1 + u 2 v 2 + u 3 v 3 u\cdot v= \begin{bmatrix} u_1&u_2&u_3 \end{bmatrix} ^{T}\cdot \begin{bmatrix} v_1&v_2&v_3 \end{bmatrix} ^{T} = u_1v_1+u_2v_2+u_3v_3 u⋅v=[u1u2u3]T⋅[v1v2v3]T=u1v1+u2v2+u3v3
这个定义看上去很简单,好像没什么特殊含义。但是,他的另一种表示方法所含的物理意义就十分清晰: u ⋅ v = ∣ u ∣ ∣ v ∣ c o s θ u\cdot v=\left| u \right|\left| v \right|cos\theta u⋅v=∣u∣∣v∣cosθ,如图3所示:
即:向量 u u u在向量 v v v方向上的投影长度乘上向量 v v v的模长,换句话说,如果 v v v是单位向量的话,就可以直接描述为 u u u在 v v v方向上的投影长度。
需要注意的是,我们在实际计算向量内积时,无论是行向量间的内积还是列向量间的内积,其运算结果都是一样的。
p y t h o n python python中计算向量的内积非常方便。但是需要注意,如果我们直接使用 n u m p y numpy numpy函数库中的内积方法 d o t dot dot,那么 p y t h o n python python内积运算函数 d o t dot dot中的参数要求必须是一维行向量:
代码片段:
import numpy as np
u = np.array([3, 5, 2])
v = np.array([1, 4, 7])
print(np.dot(u, v))
运行结果:
37
那么有人可能会问了,在上文中我们学习了表示行列向量的通用方法(即用行或列为 1 1 1的二维数组表示向量),用在这里行不行?我们可以看看:
代码片段:
import numpy as np
u = np.array([[3, 5, 2]])
v = np.array([[1, 4, 7]])
print(np.dot(u,v))
运行结果:
Traceback (most recent call last):
File "D:/code/test/test.py", line 5, in <module>
print(np.dot(u, v))
ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
代码片段:
import numpy as np
u = np.array([[3, 5, 2]]).T
v = np.array([[1, 4, 7]]).T
print(np.dot(u,v))
运行结果:
Traceback (most recent call last):
File "D:/code/test/test.py", line 5, in <module>
print(np.dot(u,v))
ValueError: shapes (3,1) and (3,1) not aligned: 1 (dim 1) != 3 (dim 0)
看上去似乎有些问题,学完后面几节内容大家就会知道,这种向量的表示方法本质上其实是矩阵,只不过是行数或者列数为 1 1 1的特殊矩阵,将这种方法表示下的向量作为 d o t dot dot函数的参数,就需要依据矩阵的乘法法则来计算,依据矩阵乘法法则判定就会报错,至于为什么会出错,后面的小节会重点讲述,那么怎么样才能得到正确的结果呢,这里先提前预告一下:
代码片段:
import numpy as np
u = np.array([[3, 5, 2]])
v = np.array([[1, 4, 7]]).T
print(np.dot(u,v))
运行结果:
[[37]]
看上去得到了一个正确的数值结果,至于为什么外面围着两层中括号,同样的,看完后面的内容就会明白。
3.4.向量的外积
我们只讨论二维平面和三维空间中的向量外积:
在二维平面中: u × v = [ u 1 u 2 ] T × [ v 1 v 2 ] T = u 1 v 2 − u 2 v 1 u\times v= \begin{bmatrix} u_1&u_2 \end{bmatrix} ^{T}\times \begin{bmatrix} v_1&v_2 \end{bmatrix} ^{T} = u_1v_2-u_2v_1 u×v=[u1u2]T×[v1v2]T=u1v2−u2v1
同样的,还有另一种表达式,看起来物理意义会更直观一些:
u
⋅
v
=
∣
u
∣
∣
v
∣
s
i
n
θ
u\cdot v=\left| u \right|\left| v \right|sin\theta
u⋅v=∣u∣∣v∣sinθ ,如图4所示。这表示两个向量张成的平行四边形的面积,当然,这里的面积要打引号,因为如果两个向量的夹角大于180°,则结果为负。
代码片段:
import numpy as np
u = np.array([3, 5])
v = np.array([1, 4])
print(np.cross(u, v))
运行结果:
7
而在三维空间中,外积的计算要相对复杂一些,其计算的结果是一个向量而不是一个数值。
u × v = [ u 1 u 2 u 3 ] T × [ v 1 v 2 v 3 ] T = [ u 2 v 3 − u 3 v 2 u 3 v 1 − u 1 v 3 u 1 v 2 − u 2 v 1 ] T u\times v= \begin{bmatrix} u_1&u_2&u_3 \end{bmatrix} ^{T}\times \begin{bmatrix} v_1&v_2&v_3 \end{bmatrix} ^{T} = \begin{bmatrix} u_2v_3-u_3v_2&u_3v_1-u_1v_3&u_1v_2-u_2v_1 \end{bmatrix} ^{T} u×v=[u1u2u3]T×[v1v2v3]T=[u2v3−u3v2u3v1−u1v3u1v2−u2v1]T
这个向量也是有物理含义的,即两个向量所表示平面的法向量。
代码片段:
import numpy as np
x = np.array([3, 3, 9])
y = np.array([1, 4, 12])
print(np.cross(x, y))
运行结果:
[ 0 -27 9]
4.向量的线性组合
在向量加法和数量乘法的基础上,我们将其组合应用,就过渡到向量的线性组合相关内容。针对向量 u u u和 v v v,我们先求数字 c c c和向量 u u u的数量积,再求数字 d d d和向量 v v v的数量积,最后将二者叠加,就得到了 u u u和 v v v的线性组合 c u + d v cu+dv cu+dv,这里 c c c和 d d d可以取任意值(包括 0 0 0)。
我们再举一个三个三维向量线性组合的例子:
u = [ u 1 u 2 u 3 ] u=\begin{bmatrix} u_1\\u_2\\u_3 \end{bmatrix} u=⎣⎡u1u2u3⎦⎤, v = [ v 1 v 2 v 3 ] v=\begin{bmatrix} v_1\\v_2\\v_3 \end{bmatrix} v=⎣⎡v1v2v3⎦⎤, w = [ w 1 w 2 w 3 ] w=\begin{bmatrix} w_1\\w_2\\w_3 \end{bmatrix} w=⎣⎡w1w2w3⎦⎤:
c u + d v + e w = c [ u 1 u 2 u 3 ] + d [ v 1 v 2 v 3 ] + e [ w 1 w 2 w 3 ] = [ c u 1 + d v 1 + e w 1 c u 2 + d v 2 + e w 2 c u 3 + d v 3 + e w 3 ] cu+dv+ew = c\begin{bmatrix} u_1\\u_2\\u_3 \end{bmatrix} +d\begin{bmatrix} v_1\\v_2\\v_3 \end{bmatrix} +e\begin{bmatrix} w_1\\w_2\\w_3 \end{bmatrix}=\begin{bmatrix} cu_1+dv_1+ew_1\\cu_2+dv_2+ew_2\\cu_3+dv_3+ew_3 \end{bmatrix} cu+dv+ew=c⎣⎡u1u2u3⎦⎤+d⎣⎡v1v2v3⎦⎤+e⎣⎡w1w2w3⎦⎤=⎣⎡cu1+dv1+ew1cu2+dv2+ew2cu3+dv3+ew3⎦⎤
其中, c c c, d d d, e e e可以取包含 0 0 0在内的任意值。
在这里,我们也举个例子来对几个已知的向量进行线性组合:
代码片段:
import numpy as np
u = np.array([[1, 2, 3]]).T
v = np.array([[4, 5, 6]]).T
w = np.array([[7, 8, 9]]).T
print(3*u+4*v+5*w)
运行结果:
[[54]
[66]
[78]]
那么进一步,我们思考一下下面几个线性组合的图像。
我们知道,两个向量相加,在几何上就是将两个向量首尾依次连接,结果向量就是最初的起点和最终的终点的有向连线。我们假定有三个非零的三维向量: u = [ u 1 u 2 u 3 ] u=\begin{bmatrix} u_1\\u_2\\u_3 \end{bmatrix} u=⎣⎡u1u2u3⎦⎤, v = [ v 1 v 2 v 3 ] v=\begin{bmatrix} v_1\\v_2\\v_3 \end{bmatrix} v=⎣⎡v1v2v3⎦⎤, w = [ w 1 w 2 w 3 ] w=\begin{bmatrix} w_1\\w_2\\w_3 \end{bmatrix} w=⎣⎡w1w2w3⎦⎤,我们讨论他们的线性组合:
情况一, c u cu cu的所有线性组合的图像:
由于
c
c
c可以取
0
0
0,因此
c
u
cu
cu的所有线性组合可以表示为三维空间中一条穿过原点
(
0
,
0
,
0
)
(0,0,0)
(0,0,0)的直线,如图5所示:
情况二, c u + d v cu+dv cu+dv的所有线性组合的图像:
当向量
u
u
u和
v
v
v不在一条直线上时,
c
u
+
d
v
cu+dv
cu+dv表示三维空间中的一个通过原点
(
0
,
0
,
0
)
(0,0,0)
(0,0,0)的二维平面,如图6所示:
当向量 u u u和 v v v处在一条直线上时, c u + d v cu+dv cu+dv的图像退化成第一种情况;
情况三, c u + d v + e w cu+dv+ew cu+dv+ew的所有线性组合的图像:
当向量 u u u, v v v, w w w不在一个平面上时, c u + d v + e w cu+dv+ew cu+dv+ew可以表示整个三维空间;
当向量 u u u, v v v, w w w处在一个平面上时, c u + d v + e w cu+dv+ew cu+dv+ew的图像退化成第二种情况;
当向量 u u u, v v v, w w w处在一条直线上时, c u + d v + e w cu+dv+ew cu+dv+ew的图像退化成第一种情况;
不难发现,我们在讨论上述多种情况时,反复提到了共线、共面的概念,这些性质会对一组向量线性组合的结果向量的空间位置分布产生较大影响,是线性代数中非常关键的概念,在后续的内容中,我们会围绕他开展深入的讨论,不过我们会使用更加专业的词汇来进行描述和介绍,即:线性相关和线性无关。
5.关于向量坐标的讨论
5.1.向量的坐标取决于基底
对于向量 u = [ 4 5 ] T u=\begin{bmatrix}4&5\end{bmatrix} ^{T} u=[45]T而言,我们一直以来都很理所应当的认为:他表示一条在 x x x轴上投影为 4 4 4, y y y轴上投影为 5 5 5的有向线段,他的坐标是 ( 4 , 5 ) (4,5) (4,5)。这其实是基于了一个我们没有刻意强调的前提:我们是利用了方向为 x x x轴、 y y y轴正方向并且长度为 1 1 1的两个向量 e x = [ 1 0 ] T e_{x}=\begin{bmatrix}1&0\end{bmatrix} ^{T} ex=[10]T, e y = [ 0 1 ] T e_{y}=\begin{bmatrix}0&1\end{bmatrix} ^{T} ey=[01]T作为讨论的基准。因此,对向量 u u u的完整写法就是: u = 4 e x + 5 e y u=4e_{x}+5e_{y} u=4ex+5ey, u = 4 [ 1 0 ] T + 5 [ 0 1 ] T u=4\begin{bmatrix}1&0\end{bmatrix} ^{T}+5\begin{bmatrix}0&1\end{bmatrix} ^{T} u=4[10]T+5[01]T。
这里被选中作为向量 u u u基准的一组向量是 e x e_{x} ex, e y e_{y} ey,他们被称作是基底,基底的每一个成员称作是基向量。而坐标,就对应的是各基向量前的系数。一般情况下,如果不作特殊说明,基向量都是选取沿着坐标轴正方向且长度为 1 1 1的向量。
因此关于向量 u u u的完整准确的说法是:在基底 ( e x (e_{x} (ex, e y ) e_{y}) ey)下,其坐标是 [ 4 5 ] T \begin{bmatrix}4&5\end{bmatrix} ^{T} [45]T。也就是说,坐标必须依托于指定的基底才有意义。因此,要想准确的描述向量,首先要确定一组基,然后通过求出向量在各个基向量上的投影值,最终才能确定在这个基上的坐标值。
5.2.同一向量在不同基底上表示为不同坐标
一个指定的向量可以在多组不同的基底上进行坐标表示,在不同的基底表示下,坐标自然也是不同的。根据一组基底对应的坐标去求另一组基底对应的坐标,这就是我们后面会反复用到的坐标变换。
例如,我们可以选择不使用默认的基底: [ 1 0 ] T \begin{bmatrix}1&0\end{bmatrix} ^{T} [10]T和 [ 0 1 ] T \begin{bmatrix}0&1\end{bmatrix} ^{T} [01]T,而选择这两个看似普通的向量: [ 1 1 ] T \begin{bmatrix}1&1\end{bmatrix} ^{T} [11]T和 [ − 1 1 ] T \begin{bmatrix}-1&1\end{bmatrix} ^{T} [−11]T作为新的基。
根据向量内积的介绍,我们最好是把基向量的模长转化为 1 1 1,因为如果模是 1 1 1,那么就可以用目标向量点乘基向量,从而直接获得其在这个基向量上的对应坐标。实际上对应任何一个向量,找到其同方向上模为 1 1 1的向量并不难,只要让向量的各成分分别除以向量模长就好了。
例如,上面的基可以变为 e i ′ = [ 1 2 1 2 ] T e_{i}^{'}=\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T} ei′=[2121]T和 e j ′ = [ − 1 2 1 2 ] T e_{j}^{'}=\begin{bmatrix}-\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T} ej′=[−2121]T。
现在,我们来用上面的方法求取向量 u = [ 4 5 ] T u=\begin{bmatrix}4&5\end{bmatrix} ^{T} u=[45]T在这组新基上的新坐标。那么根据向量内积的几何意义,我们只要分别计算 u = [ 4 5 ] T u=\begin{bmatrix}4&5\end{bmatrix} ^{T} u=[45]T和这两个基向量 e i ′ = [ 1 2 1 2 ] T e_{i}^{'}=\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T} ei′=[2121]T和 e j ′ = [ − 1 2 1 2 ] T e_{j}^{'}=\begin{bmatrix}-\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T} ej′=[−2121]T的内积即可,不难得到: u ⋅ e i ′ = 9 2 u\cdot e_i^{'}=\frac{9}{\sqrt{2}} u⋅ei′=29, u ⋅ e j ′ = 1 2 u\cdot e_j^{'}=\frac{1}{\sqrt{2}} u⋅ej′=21。
向量的坐标是指定基的对应系数,因此向量 u u u的表达式可以写作: 9 2 e i ′ + 1 2 e j ′ \frac{9}{\sqrt{2}}e_{i}^{'}+\frac{1}{\sqrt{2}}e_{j}^{'} 29ei′+21ej′。在该基底下,坐标表示为 [ 9 2 1 2 ] T \begin{bmatrix}\frac{9}{\sqrt{2}}&\frac{1}{\sqrt{2}}\end{bmatrix} ^{T} [2921]T。图7描述了利用上述两组不同的基底,对同一向量进行坐标表示的情况。
6.基底的特殊性
6.1.不是任何向量都能选作基底
在二维平面里,任意取两个向量是否都能作为基底去表示目标向量呢?我们看一个实际例子。
例如:我们尝试选取向量 [ 1 1 ] T \begin{bmatrix}1&1\end{bmatrix} ^{T} [11]T和 [ − 1 − 1 ] T \begin{bmatrix}-1&-1\end{bmatrix} ^{T} [−1−1]T来作为空间的基底,但是我们发现,无论如何都找不出两个系数,将目标向量 u u u表示为这两个向量的线性组合形式,即:满足等式 [ 4 5 ] T = c [ 1 1 ] T + d [ − 1 − 1 ] T \begin{bmatrix}4&5\end{bmatrix} ^{T}=c\begin{bmatrix}1&1\end{bmatrix} ^{T}+d\begin{bmatrix}-1&-1\end{bmatrix} ^{T} [45]T=c[11]T+d[−1−1]T成立的 c c c和 d d d是不存在的,因此他们不能作为基底。
看来,在一个 n n n维空间里,不是随随便便选取 n n n个向量都能作为一组基底的, n n n维空间中的基底必须满足这样的要求: n n n维空间中任意一个向量都可以表示为基向量的线性组合,并且这种线性组合的表示方式必须是唯一的。那么,选择基底的正确姿势是什么?我们下面来仔细分析:
6.2.基底中的向量数量要足够
这句话听上去比较抽象,为了直观的进行讨论,我们先用三维空间进行举例,三维空间中的一组基,首先每一个基向量的维数必然为 3 3 3,而基向量的个数也必须为 3 3 3个,如果数量不足,例如只有 2 2 2个三维向量 e 1 , e 2 e_1,e_2 e1,e2(假设他们不共线),那么无论对这 2 2 2个向量如何进行线性组合,他们都只能表示二者所在平面上的向量,三维空间中该平面外的向量他们是无法表示的。
6.3.基向量满足线性无关
如何确保能够满足表示方法的唯一性呢?这里我们就引入向量线性无关的概念,一组向量需要满足线性无关的条件,即:其中任何一个向量都不能通过其余向量的线性组合的形式进行表示。
换句话说,当且仅当 x 1 = x 2 = . . . = x n = 0 x_1=x_2=...=x_n=0 x1=x2=...=xn=0时,线性组合 x 1 u 1 + x 2 u 2 + x 3 u 3 + . . . + x n u n x_1u_1+x_2u_2+x_3u_3+...+x_nu_n x1u1+x2u2+x3u3+...+xnun才能生成 0 0 0向量,如果 x i x_i xi中有非 0 0 0值存在,那么这一组向量就是线性相关的了。
为什么一组向量满足了线性无关性的条件就等效于满足了线性组合表示方法的唯一性呢?我们可以简单的做一个说明:对于一组线性无关的向量: u 1 , u 2 , . . . , u n u_1,u_2,...,u_n u1,u2,...,un,对于空间中的向量 p p p,假设有两种不同的表示方法,即:
p = c 1 u 1 + c 2 u 2 + . . . + c n u n = d 1 u 1 + d 2 u 2 + . . . + d n u n p=c_1u_1+c_2u_2+...+c_nu_n=d_1u_1+d_2u_2+...+d_nu_n p=c1u1+c2u2+...+cnun=d1u1+d2u2+...+dnun,整理一下有:
(
c
1
−
d
1
)
u
1
+
(
c
2
−
d
2
)
u
2
+
.
.
.
+
(
c
n
−
d
n
)
u
n
=
0
(c_1-d_1)u_1+(c_2-d_2)u_2+...+(c_n-d_n)u_n=0
(c1−d1)u1+(c2−d2)u2+...+(cn−dn)un=0,由于
u
1
,
u
2
,
.
.
.
,
u
n
u_1,u_2,...,u_n
u1,u2,...,un是线性无关的向量,那么则必须满足:
c
1
−
d
1
=
0
,
c
2
−
d
2
=
0
,
.
.
.
,
c
n
−
d
n
=
0
c_1-d_1=0,c_2-d_2=0,...,c_n-d_n=0
c1−d1=0,c2−d2=0,...,cn−dn=0,即
c
i
=
d
i
c_i=d_i
ci=di,因此就不可能有两种线性组合的表达方式,从而产生了矛盾。通过反证法就证明了线性无关性和唯一性是等价的。
在这个三维空间中,我们就要求所选取的三个基向量线性无关,如果他们线性相关,那么 u 3 u_3 u3就可以表示为 u 1 u_1 u1和 u 2 u_2 u2的线性组合,换句话说,候选的三个向量就处在一个平面上了,自然无法通过线性组合的方式表示三维空间中的所有向量,如图8所示:
这里我想补充说明一下,类似于图1.8中所展现的, 3 3 3个三维向量由于其线性相关,无法张成整个三维空间,只能张成三维空间中的二维平面甚至退化成一条直线,这种现象会经常遇到、用到,希望大家能够重视。
那么,如果三维空间中基向量的个数超过 3 3 3了呢?当然也不行,假设有 4 4 4个向量试图成为该空间中的一组基,我们任选出其中 3 3 3个向量,按照前提,他们满足线性无关性,那么对于第 4 4 4个向量,由于他处在三维空间中,他一定能够被前 3 3 3个向量的线性组合所表示,那么三维空间中的这 4 4 4个向量显然是线性相关的,无法满足向量构成基底的唯一性条件。因此,在三维空间中, 3 3 3个线性无关的向量就可以构成空间中的一组基底。
6.4. n n n维空间不等价于 R n R^n Rn空间
这两个概念的比较其实很重要,在后面介绍空间的时候还会专门定义,我这里先简单说说。我就举 2 2 2维空间的例子, 2 2 2维空间不仅仅只有 x o y xoy xoy二维平面这一种情况,一个倾斜在 3 3 3维空间中的过原点的平面依然能被称为 2 2 2维空间。更高维的空间中同样也会包含 2 2 2维空间。
我说这段话是什么意思呢?就是提醒读者,谈及 2 2 2维空间的一组基,不要仅仅就觉得是两个线性无关的二维向量: [ x 1 y 1 ] \begin{bmatrix}x_1\\y_1\end{bmatrix} [x1y1]和 [ x 2 y 2 ] \begin{bmatrix}x_2\\y_2\end{bmatrix} [x2y2]。两个线性无关的三维向量 [ x 1 y 1 z 1 ] \begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix} ⎣⎡x1y1z1⎦⎤和 [ x 2 y 2 z 2 ] \begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix} ⎣⎡x2y2z2⎦⎤,甚至一般化为两个线性无关的 n n n维向量都可以构成 2 2 2维空间的一组基,只是各个 2 2 2维空间的形态不同罢了。
6.5.结论
最后,我们在 n n n维空间中再次回顾一般性的情况:一组向量 e 1 , e 2 , e 3 , . . . , e n e_1,e_2,e_3,...,e_n e1,e2,e3,...,en能够构成 n n n维空间的一组基底,就必须满足 n n n维空间中的任何向量 v v v,都能表示成 v = x 1 e 1 + x 2 e 2 + . . . + x n e n v=x_{1}e_{1}+x_{2}e_{2}+...+x_{n}e_{n} v=x1e1+x2e2+...+xnen,且这种表示方法是唯一的。
再换句话说, n n n维空间中的基底由 n n n个向量 ( e 1 , e 2 , . . . , e n ) (e_{1},e_{2},...,e_{n}) (e1,e2,...,en)构成,他们需要满足线性无关的条件。
7.张成空间
最后,我们来说一说张成 ( s p a n ) (span) (span)空间的概念,对于一组向量,他的所有线性组合所构成的空间就称之为这一组向量的张成空间。
简简单单的语言,但是内涵非常丰富,我们举几个实例来说明一下不同的几种情况:
第一种情况: u 1 = [ 1 1 ] u_1=\begin{bmatrix}1\\1\end{bmatrix} u1=[11], u 2 = [ 0 1 ] u_2=\begin{bmatrix}0\\1\end{bmatrix} u2=[01]
显然,向量 u 1 u_1 u1和 u 2 u_2 u2是两个线性无关的二维向量,他构成了二维空间 R 2 R^2 R2的一组基,因此他的张成空间就是整个二维空间 R 2 R^2 R2。
第二种情况: u 1 = [ 1 1 ] u_1=\begin{bmatrix}1\\1\end{bmatrix} u1=[11], u 2 = [ − 1 − 1 ] u_2=\begin{bmatrix}-1\\-1\end{bmatrix} u2=[−1−1]
u 1 = − u 2 u_1=-u_2 u1=−u2,因此 u 1 u_1 u1和 u 2 u_2 u2是线性相关的共线向量,他们张成的空间是一条穿过原点的一维直线。
第三种情况: u 1 = [ 1 1 1 ] u_1=\begin{bmatrix}1\\1\\1\end{bmatrix} u1=⎣⎡111⎦⎤, u 2 = [ 1 − 1 1 ] u_2=\begin{bmatrix}1\\-1\\1\end{bmatrix} u2=⎣⎡1−11⎦⎤
u 1 u_1 u1和 u 2 u_2 u2两个三维向量线性无关,但是由于向量的个数只有两个,因此他们的张成空间是三维空间中的一个穿过原点的平面。
第四种情况: u 1 = [ 1 1 1 ] u_1=\begin{bmatrix}1\\1\\1\end{bmatrix} u1=⎣⎡111⎦⎤, u 2 = [ 1 − 1 1 ] u_2=\begin{bmatrix}1\\-1\\1\end{bmatrix} u2=⎣⎡1−11⎦⎤, u 3 = [ 3 − 1 3 ] u_3=\begin{bmatrix}3\\-1\\3\end{bmatrix} u3=⎣⎡3−13⎦⎤
虽然向量的个数是 3 3 3,但是 u 3 = u 1 + 2 u 2 u_3=u_1+2u_2 u3=u1+2u2,因此他们是三个线性相关的共面向量,张成的空间仍然直是三维空间中的一个穿过原点的平面。
第五种情况: u 1 = [ 1 1 1 ] u_1=\begin{bmatrix}1\\1\\1\end{bmatrix} u1=⎣⎡111⎦⎤, u 2 = [ 1 − 1 1 ] u_2=\begin{bmatrix}1\\-1\\1\end{bmatrix} u2=⎣⎡1−11⎦⎤, u 3 = [ 3 − 1 5 ] u_3=\begin{bmatrix}3\\-1\\5\end{bmatrix} u3=⎣⎡3−15⎦⎤
u 1 u_1 u1, u 2 u_2 u2, u 3 u_3 u3三个向量线性无关,构成三维空间 R 3 R^3 R3中的一组基,因此他们的张成空间是整个三维空间 R 3 R^3 R3。
这五种情况其实很有意思,我们会发现:向量的个数和维数都不是其张成空间的决定因素,而是需要结合向量的线性无关性进行考量,这就会涉及到秩的相关概念,这一节我们不再展开,后面的章节慢慢再谈。