线性代数之六:特征值与特征向量

来源:互联网 发布:linux 7 dns配置 编辑:程序博客网 时间:2024/05/16 12:07

6.1 特征值与特征向量

特征向量:若A为n阶方阵,如果存在一个非零向量x使得Ax=λx,则称标量λ为特征值(eigenvalue),称x为属于λ的特征向量(eigenvector)。

特征向量与零度空间:方程Ax=λx可以写为(AλI)x=0,因此λ为特征值的充要条件是方程有一非平凡解,也即零度空间N(AλI)中不仅只有零解,其中任意非零向量均为属于λ的特征向量。子空间N(AλI)称为对应于λ的特征空间。

特征方程(AλI)x=0有非零解的充要条件是矩阵AλI为奇异的,即det(AλI)=0,称此方程为特征方程。特征方程的根即A的特征值。如果方程有重根,且重根也计数,则特征方程恰有n个根,其中可能会有重复,也可能会是复数。

特征值的性质:

  • 矩阵A的行列式的值为所有特征值的积
  • 矩阵A的对角线元素和称为A的迹(trace)等于特征值的和

相似矩阵的特征值:若方阵A和B相似,则这两个矩阵有相同的特征多项式,且它们有相同的特征值。

使用numpy计算矩阵的特征值与特征向量:

import numpy as npA=np.array([[3,2],[3,-2]])w,v = np.linalg.eig(A) print w #4,-3 特征值print v #对应的特征向量[[ 0.89442719, -0.31622777],                        [ 0.4472136 ,  0.9486833 ]]

6.2 对角化

6.2.1 基本概念

定理:若λ1,λ2,...,λk为n阶矩阵A的不同特征值,相应的特征向量为x1,x2,...,xk,则x1,x2,...,xk线性无关。

可对角化:若存在一个非奇异的矩阵X和一个对角矩阵D,使用n阶方阵A满足

X1AX=D
则称A为可对角化(diagonalizable),称X将A对角化。X的列向量为A的特征向量,D的对角元素为A的相应的特征值。一般地有:
Ak=XDkX1=Xλk1λk2λknX1

定理:方阵A是可对角化的,当且仅当A有n个线性无关的特征向量。

退化矩阵:若n阶方阵A有少于n个线性无关的特征向量,则A是退化的(defective),退化矩阵不可对角化。

6.2.2 马尔可夫链

马尔可夫过程:对一个试验,若其每一步的输出都取决于概率,则称为一个随机过程(stochastic process)。马尔可夫过程(Markov process)是随机过程,它有如下性质:

  • 可能的输出集合或状态是有限的
  • 下一步输出的概率仅依赖于前一步的输出
  • 概率相对于时间是常数

马尔可夫链
状态之间的迁移概率可以表示为迁移矩阵A,其第i列表示由第i个状态向其他状态变迁的概率,A的每一列元素均为非负的,且和为1。

若初始状态集记为x0,并记后续各次状态集为xi,则后续状态集可通过矩阵乘法计算得到:xi=Aix0,并称xi的序列是马尔可夫链。

定理:若一个马尔可夫链的转移矩阵为A,且其收敛到一个稳态向量x,则x为一个概率向量,λ=1为其一个特征值,且x为属于这个特征值的特征向量。

定理:若马尔可夫链的转移矩阵A的其他特征值均不大于1,且存在λ=1,称其主特征值(dominant eiganvalue),此时转移矩阵A可使用得马尔可夫链收敛到稳定向量。

马尔可夫过程的应用
PageRank算法将网页浏览过程看成马尔可夫过程,其转移矩阵A为n*n的,目前n超过200亿。

A的(i,j)元素表示从网站j到i的跳转概率(可由浏览历史统计出来),可证迁移矩阵存在稳态向量,随着浏览的进行最终可以达到惟一的稳态向量x,即到达某个站点k,向量中的元素xk的确定了网站k的整体分级。

进行网页搜索时,首先寻找所有和关键字匹配的网页,然后将这些网页按照它们的网页分级递减的顺序列出来。

6.2.3 矩阵指数

由实数的泰勒级数展开式:

ex=1+x+12!x2+...+1n!xn

若对任何的n*n矩阵A,可定义矩阵指数:

eA=I+A+12!A2+...+1n!An

在对角矩阵的情况下,容易计算

eD=eλ1eλ2eλn

对一般的矩阵A,计算比较困难,但若A是可对角化的,则:eA=XeDX1

6.4 埃尔米特矩阵

6.4.1 复内积

Cn表示所有n元复数构成的向量空间,若α=a+bi为标量,则其长度为|α|=a2+b2Cn中的向量z=(z1,z2,...,zn)的长度为

||z||=(i=1n|zi|)1/2=(zHz)1/2zHz

定义:令V为一复数域上的向量空间,V上的内积定义为关联一对向量z和w的复数

6.4.2 埃尔米特矩阵

令M为复矩阵,M为其共轭矩阵,MHM的转置,若M=MH,则称它为埃尔米特矩阵(Hermitian)。实对称矩阵均为埃尔米特矩阵。

埃尔米特矩阵与特征向量:埃尔米特矩阵的特征值均为实的,且属于不同特征值的特征向量为正交的。

酉矩阵:若方阵U的列向量构成Cn中的一个规范正交基,则称其为酉矩阵(unitary matrix)。U为酉矩阵的充要条件是UHU=I,实酉矩阵为正交矩阵。

若埃尔米特的对角化:若埃尔米特矩阵A的特征值互不相同,则存在一个酉矩阵U对角化A。

舒尔(schur)定理:对每一个方阵A,存在一个酉矩阵U,使得UHAU为上三角矩阵。将A分解UHTU称为舒尔分解。当A为埃尔米特矩阵时,T为对角矩阵。

谱定理:若A为埃尔米特矩阵,则存在一个酉矩阵U对角化A。
定理:若A为实对称矩阵,则存在一个正交矩阵Q对角化A,即QTAQ=D,其中D是对角的。

正规矩阵:矩阵A若满足AAH=AHA,则称A为正规矩阵。
定理:矩阵A是正规矩阵,当且仅当A有一个完备的规范正交特征向量集。

6.5 奇异值分解

SVD定理:若A为任意m*n矩阵,则A有一个奇异值分解
奇异值(SVD)分解:将m*n的矩阵A分解为乘积USVT,其中U是m*m的正交矩阵,V是一个n*n正交矩阵,S是一个m*n矩阵,其对角线下的元素均为0,且对角线元素满足:s1s2...sn0,通过分解可得惟一一组si,称其为A的奇异值。

若A为一m*n矩阵,且Q为一m*m的正交矩阵,则||QA||F=||A||F

下面的代码显示了使用numpy对矩阵进行SVD分解的方法

import numpy as npa = np.array([[1,1],[1,1],[0,0]])s,v,d = np.linalg.svd(a)print v.astype(int)  # [2,0] 奇异值向量print s,d'''[[-0.70710678 -0.70710678  0.        ] [-0.70710678  0.70710678  0.        ] [ 0.          0.          1.        ]] [[-0.70710678 -0.70710678] [ 0.70710678 -0.70710678]] '''

SVD分解可以应用在数字图像压缩,主成分分析等领域,用于数据的压缩或降维。

数值秩:一个m*n的矩阵的数值秩(numberical rank)为矩阵的奇异值中大于s1max(m,n)ϵ的个数。其中s1为A最大的奇异值,且ϵ为计算机的单位舍入误差。在matlab或numpy中rank都计算的是数值秩。

6.6 二次型

6.6.1 二次型

定义:一个二次(quadratic)方程为两个变量x和y的方程

ax2+2bxy+cy2+dx+ey+f=0

可以写为
[xy][abbc][xy]+[de][xy]+f=0

x=[xy]A=[abbc],则
xTAx=ax2+2bxy+cy2

称其为与二次方程相关的二次型。

上面的二次方程对应的图形为圆锥曲线(conic section)。圆,椭圆,双曲线,抛物线均可由其表示。

主轴定理:若A为一实对称的n*n矩阵,则存在一个变量变换u=QTx使得xTAx=uTDu,其中D为一对角矩阵。

6.6.2 正定

定义:一个实对称矩阵A称

  • 正定的(positive definite),若对Rn中所有非零向量x,xTAx>0
  • 负定的(negative definite),若对Rn中所有非零向量x,xTAx<0
  • 半正定的(positive semidefinite),若对Rn中所有非零向量x,xTAx0
  • 半负定的(negative semidefinite),若对Rn中所有非零向量x,xTAx0
  • 不定的(indefinite),若对Rn中所有非零向量x,xTAx有不同的符号

定理:若A为n阶实对称矩阵,A是正定的,当且仅当其特征值均为正

6.7 正定矩阵

前主子矩阵:给定n*n的矩阵A,令Ar表示将A的最后n-r行和列删去后得到的矩阵,称其为A的r阶前主子矩阵(leading principal submatrix)。

对称正定矩阵的性质:

  • 若A为一对称正定矩阵,则A是非奇异的,det(A)>0
  • 若A为一对称正定矩阵,则A的前主子矩阵A1,A2,...,An均为正定的。
  • 若A为一对称正定矩阵,则A可仅使用第三类行变换化为上三角矩阵,且主元全为正。
  • 若A为一对称正定矩阵,则A可分解为乘积LDLT,其中L为下三角的,其对角线上元素为1,且D为一个对角矩阵,其对角元素均为正的。
  • 若A为一对称正定矩阵,则A可分解为一个乘积LLT,其中L为下三角的,其对角线元素均为正的。此分解称为cholesky分解。

下面的代码演示了使用numpy对矩阵进行cholesky分解的方法

a = np.array([[4,2],[2,10]])l = np.linalg.cholesky(a)print l #[[2,0],[1,3]]