变换有很多种形式,它描述了输入和输出间的映射(mapping/map)关系,这篇文章主要讨论线性变换,每个线性变换都对应一个矩阵,线性变换与坐标无关,而矩阵与坐标有关,因此矩阵是基于坐标来描述线性变换,例如投影就是一种常见的线性变换,与其对应的是投影矩阵,判断是线性变换需满足以下两个条件:
其中v和w分别是向量,T表示对向量的变换,上两式表明线性变换应该保证加法和乘法的不变性,这两个条件可合并为一个条件: ,前面提及的投影变换,满足一个向量乘以倍数,其投影也乘以相应倍数,两向量和的投影等于各自投影的和,再举几个例子,用上面的两个条件来判断其是否为线性变换。
例1:向量平移。假设向量v沿着某方向平移v0,即T(v)=v+v0,很明显这不是线性变换,因为如果向量v的长度加倍,T(v)并不会加倍。除了用上面的两个条件来判断之外,还可以通过T(0)来判断是否为线性变换,线性变换必须满足零向量经过变换后一定等于零向量,从这一点也可看出例1不是线性变换。
例2:平方运算。例如求向量的长度,T(v)=||v||,如果向量乘以-2,则其长度还是变为原来的2倍,而不是乘以-2,因此平方运算是一种非线性变换。
例3:旋转变换。假设输入向量为v,将其旋转45度后得到输出向量T(v),如果加倍v,则输出向量也加倍,对于v+w,其旋转的结果等于v和w各自旋转的结果相加,因此旋转也是一种线性变换。
由于每一个线性变换都对应了一个矩阵,因此线性变换的过程可以表示为T(v)=Av,其中A是变换矩阵,x是输入向量,理解线性变换的方法就是确定其背后的矩阵A,因为线性变换的本质都包含在矩阵中。例如有一线性变换T,其输入是3维向量,输出是2维向量,即 ,则该变换对应的A应该是一个2*3矩阵。
我们现已理解单个向量线性变换的结果,例如T(v1),但如果要考虑线性变换对于整个输入空间造成的影响呢?难道要对输入空间中的向量一个个进行计算吗?答案很明显不是,只要确定了线性变换对于该空间基向量的影响,就能了解线性变换对于整个输入空间的影响,也就是说只要确定了 T(v1) T(v2) …T(vn),其中v1…vn是输入空间的一组基,简称输入基,就足以确定任何v的线性变换T(v),因为v总是基向量的线性组合v=c1v1+…cnvn,T(v)=c1T(v1)+c2T(v2)+cnT(vn)。
线性变换与变换矩阵的转换
线性变换本身是坐标无关的,但将其与坐标有关的矩阵联系起来后,就需要建立坐标系,建立坐标系就要确定坐标系的基,如果选择的基不同,坐标也会不同,一般来说,坐标系建立在标准基的基础上,我们平时甚至不会意识到标准基的存在,因为如果给一个向量 ,我们甚至想都没想过,就早已接受了这样的假设,其实存在这样一组标准基
,标准基前面的系数就是向量在该坐标系的坐标,虽然基有很多种,但一般要选择有意义的基。所以如果我们希望通过一个矩阵来描述线性变换,即构造一个矩阵A,用于表示一个线性变换T,
,实际上需要两组基,输入基用来确定输入向量坐标,输出基用于确定输出向量坐标,当然两组基也可以选相同的,假设v1,v2,…vn为输入向量的基,它们来自于Rn,另一组基w1,w2,…wm为输出向量的基,它们来自于Rm,基一旦确定,对应的矩阵也就确定,现在我们引入坐标,Rn中的输入向量v,根据输入基表示出它的坐标,然后把这些坐标值乘以某个矩阵A,得到输出向量的坐标值,输出坐标通过输出基表示,以上就是线性变换的全部过程。可以举一个投影的例子来加深对上述线性变换过程的理解,为简化计算,取n=m=2,也就是说参与变换的向量都在平面上,如下图所示,通过变换使得平面上的任意向量投影到直线1上,这里不采用标准基(标准基即为(0,1)和(1,0),这是最常用的一组基向量)作为基,而是用投影方向和投影方向的垂直方向作为基,也就是说第一个基向量就在直线1上,为直线1上的单位向量,第2个基向量也是单位向量,在直线2上,直线2与直线1是垂直的,输入和输出空间都采用这组基,对于输入向量v1,其输出仍是v1,对于输入向量v2,投影等于0,对于任意向量v,都可以表示成两个基向量的线性组合,v=c1v1+c2v2,因此有T(v)=c1v1,所以变换矩阵的作用是输入
,输出
,很明显能完成这个功能的矩阵就是A=
,总结一下线性变换的过程:原来的线性变换与坐标无关,但是为输入空间和输出空间选定基向量后,就得到了一个起同样变换作用的矩阵,它乘以输入向量坐标可得输出坐标。
上面例子中的投影是在特征向量基中进行的,也可以将其放在标准基中进行,假设需将所有向量投影到一根倾斜45度的直线上,输入输出空间都采用标准基,标准基 ,根据子空间投影,投影矩阵
,如果输入基向量
,则输出是
,如果输入基向量
,输出还是
,可以看到选择不同的基向量,得到的向量坐标不同,投影矩阵也不再是上面的对角阵。
如何确定变换矩阵?
假设已知输入基和输出基分别是v1…vn,w1…wn,那么变换矩阵A的第一列就是第一个基向量的线性变换,因为输入第一个基向量v1也就意味着输入坐标是 ,矩阵A乘以v1就等于A的第一列,因此矩阵A的第一列就是第一个基向量的线性变换,这对于第一列成立,对于第二列也成立,对于所有基向量都成立。因此求变换矩阵A最直接的方法就是,对基向量v1进行线性变换,写出其输出
作为矩阵第1列,对基向量v2进行线性变换,写出其输出
作为矩阵A的第2列,如此类推,最终得到整个变换矩阵A。
最后还是用例子加深一下对线性变换的理解。
求导数是常用的一种变换, ,它也是一个线性变换,假设输入是所有组合c1+c2x+c3x2,它的基是一些简单的幂函数1,x,x2,对输入求导后得输出是c2+2c3x,输出基是1,x,这是一个从三维输入空间到二维输出空间的线性变换,变换矩阵A乘以输入向量坐标,得到输出坐标,即
,从该式我们容易推出,
,可以验证一下A的三列是否分别是三个基的输出,第1个基的坐标为
,则输出为
,第2个基的坐标为
,则输出为
,第3个基的坐标为
,则输出为
,变换矩阵的列与基向量坐标值的线性变换是对应的,用矩阵来描述线性变换的好处就是矩阵的逆相当于线性变换的逆,矩阵的乘积相当于线性变换的乘积。