线性代数之六:特征值与特征向量
6.1 特征值与特征向量特征向量:若A为n阶方阵,如果存在一个非零向量x使得Ax=λxAx=\lambda x,则称标量λ\lambda为特征值(eigenvalue),称x为属于λ\lambda的特征向量(eigenvector)。特征向量与零度空间:方程Ax=λxAx=\lambda x可以写为(A−λI)x=0(A - \lambda I)x=0,因此λ\lambda为特征值的充要条件是方程
6.1 特征值与特征向量
特征向量:若A为n阶方阵,如果存在一个非零向量x使得Ax=λx<script type="math/tex" id="MathJax-Element-50">Ax=\lambda x</script>,则称标量λ<script type="math/tex" id="MathJax-Element-51">\lambda</script>为特征值(eigenvalue),称x为属于λ<script type="math/tex" id="MathJax-Element-52">\lambda</script>的特征向量(eigenvector)。
特征向量与零度空间:方程Ax=λx<script type="math/tex" id="MathJax-Element-53">Ax=\lambda x</script>可以写为(A−λI)x=0<script type="math/tex" id="MathJax-Element-54">(A - \lambda I)x=0</script>,因此λ<script type="math/tex" id="MathJax-Element-55">\lambda</script>为特征值的充要条件是方程有一非平凡解,也即零度空间N(A−λI)<script type="math/tex" id="MathJax-Element-56">N(A-\lambda I)</script>中不仅只有零解,其中任意非零向量均为属于λ<script type="math/tex" id="MathJax-Element-57">\lambda</script>的特征向量。子空间N(A−λI)<script type="math/tex" id="MathJax-Element-58">N(A-\lambda I)</script>称为对应于λ<script type="math/tex" id="MathJax-Element-59">\lambda</script>的特征空间。
特征方程(A−λI)x=0<script type="math/tex" id="MathJax-Element-60">(A - \lambda I)x=0</script>有非零解的充要条件是矩阵A−λI<script type="math/tex" id="MathJax-Element-61">A-\lambda I</script>为奇异的,即det(A−λI)=0<script type="math/tex" id="MathJax-Element-62">det(A-\lambda I)=0</script>,称此方程为特征方程。特征方程的根即A的特征值。如果方程有重根,且重根也计数,则特征方程恰有n个根,其中可能会有重复,也可能会是复数。
特征值的性质:
- 矩阵A的行列式的值为所有特征值的积
- 矩阵A的对角线元素和称为A的迹(trace)等于特征值的和
相似矩阵的特征值:若方阵A和B相似,则这两个矩阵有相同的特征多项式,且它们有相同的特征值。
使用numpy计算矩阵的特征值与特征向量:
import numpy as np
A=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<script type="math/tex" id="MathJax-Element-63">\lambda_1,\lambda_2,...,\lambda_k</script>为n阶矩阵A的不同特征值,相应的特征向量为x1,x2,...,xk<script type="math/tex" id="MathJax-Element-64">x_1,x_2,...,x_k</script>,则x1,x2,...,xk<script type="math/tex" id="MathJax-Element-65">x_1,x_2,...,x_k</script>线性无关。
可对角化:若存在一个非奇异的矩阵X和一个对角矩阵D,使用n阶方阵A满足
定理:方阵A是可对角化的,当且仅当A有n个线性无关的特征向量。
退化矩阵:若n阶方阵A有少于n个线性无关的特征向量,则A是退化的(defective),退化矩阵不可对角化。
6.2.2 马尔可夫链
马尔可夫过程:对一个试验,若其每一步的输出都取决于概率,则称为一个随机过程(stochastic process)。马尔可夫过程(Markov process)是随机过程,它有如下性质:
- 可能的输出集合或状态是有限的
- 下一步输出的概率仅依赖于前一步的输出
- 概率相对于时间是常数
马尔可夫链
状态之间的迁移概率可以表示为迁移矩阵A,其第i列表示由第i个状态向其他状态变迁的概率,A的每一列元素均为非负的,且和为1。
若初始状态集记为x0<script type="math/tex" id="MathJax-Element-68">x_0</script>,并记后续各次状态集为xi<script type="math/tex" id="MathJax-Element-69">x_i</script>,则后续状态集可通过矩阵乘法计算得到:xi=Aix0<script type="math/tex" id="MathJax-Element-70">x_i = A^ix_0</script>,并称xi<script type="math/tex" id="MathJax-Element-71">x_i</script>的序列是马尔可夫链。
定理:若一个马尔可夫链的转移矩阵为A,且其收敛到一个稳态向量x,则x为一个概率向量,λ=1<script type="math/tex" id="MathJax-Element-72">\lambda =1</script>为其一个特征值,且x为属于这个特征值的特征向量。
定理:若马尔可夫链的转移矩阵A的其他特征值均不大于1,且存在λ=1<script type="math/tex" id="MathJax-Element-73">\lambda=1</script>,称其主特征值(dominant eiganvalue),此时转移矩阵A可使用得马尔可夫链收敛到稳定向量。
马尔可夫过程的应用
PageRank算法将网页浏览过程看成马尔可夫过程,其转移矩阵A为n*n的,目前n超过200亿。
A的(i,j)元素表示从网站j到i的跳转概率(可由浏览历史统计出来),可证迁移矩阵存在稳态向量,随着浏览的进行最终可以达到惟一的稳态向量x,即到达某个站点k,向量中的元素xk<script type="math/tex" id="MathJax-Element-74">x_k</script>的确定了网站k的整体分级。
进行网页搜索时,首先寻找所有和关键字匹配的网页,然后将这些网页按照它们的网页分级递减的顺序列出来。
6.2.3 矩阵指数
由实数的泰勒级数展开式:
若对任何的n*n矩阵A,可定义矩阵指数:
在对角矩阵的情况下,容易计算
对一般的矩阵A,计算比较困难,但若A是可对角化的,则:eA=XeDX−1<script type="math/tex" id="MathJax-Element-78">e^A=Xe^DX^{-1}</script>
6.4 埃尔米特矩阵
6.4.1 复内积
记Cn<script type="math/tex" id="MathJax-Element-79">C^n</script>表示所有n元复数构成的向量空间,若α=a+bi<script type="math/tex" id="MathJax-Element-80">\alpha=a+bi</script>为标量,则其长度为|α|=a2+b2‾‾‾‾‾‾‾√<script type="math/tex" id="MathJax-Element-81">|\alpha|=\sqrt{a^2+b^2}</script>。Cn<script type="math/tex" id="MathJax-Element-82">C^n</script>中的向量z=(z1,z2,...,zn)<script type="math/tex" id="MathJax-Element-83">z=(z_1,z_2,...,z_n)</script>的长度为
定义:令V为一复数域上的向量空间,V上的内积定义为关联一对向量z和w的复数
6.4.2 埃尔米特矩阵
令M为复矩阵,M⎯⎯⎯⎯<script type="math/tex" id="MathJax-Element-85">\overline M</script>为其共轭矩阵,MH<script type="math/tex" id="MathJax-Element-86">M^H</script>为M⎯⎯⎯⎯<script type="math/tex" id="MathJax-Element-87">\overline M</script>的转置,若M=MH<script type="math/tex" id="MathJax-Element-88">M=M^H</script>,则称它为埃尔米特矩阵(Hermitian)。实对称矩阵均为埃尔米特矩阵。
埃尔米特矩阵与特征向量:埃尔米特矩阵的特征值均为实的,且属于不同特征值的特征向量为正交的。
酉矩阵:若方阵U的列向量构成Cn<script type="math/tex" id="MathJax-Element-89">C^n</script>中的一个规范正交基,则称其为酉矩阵(unitary matrix)。U为酉矩阵的充要条件是UHU=I<script type="math/tex" id="MathJax-Element-90">U^HU=I</script>,实酉矩阵为正交矩阵。
若埃尔米特的对角化:若埃尔米特矩阵A的特征值互不相同,则存在一个酉矩阵U对角化A。
舒尔(schur)定理:对每一个方阵A,存在一个酉矩阵U,使得UHAU<script type="math/tex" id="MathJax-Element-91">U^HAU</script>为上三角矩阵。将A分解UHTU<script type="math/tex" id="MathJax-Element-92">U^HTU</script>称为舒尔分解。当A为埃尔米特矩阵时,T为对角矩阵。
谱定理:若A为埃尔米特矩阵,则存在一个酉矩阵U对角化A。
定理:若A为实对称矩阵,则存在一个正交矩阵Q对角化A,即QTAQ=D<script type="math/tex" id="MathJax-Element-93">Q^TAQ=D</script>,其中D是对角的。
正规矩阵:矩阵A若满足AAH=AHA<script type="math/tex" id="MathJax-Element-94">AA^H=A^HA</script>,则称A为正规矩阵。
定理:矩阵A是正规矩阵,当且仅当A有一个完备的规范正交特征向量集。
6.5 奇异值分解
SVD定理:若A为任意m*n矩阵,则A有一个奇异值分解
奇异值(SVD)分解:将m*n的矩阵A分解为乘积USVT<script type="math/tex" id="MathJax-Element-95">USV^T</script>,其中U是m*m的正交矩阵,V是一个n*n正交矩阵,S是一个m*n矩阵,其对角线下的元素均为0,且对角线元素满足:s1≥s2≥...≥sn≥0<script type="math/tex" id="MathJax-Element-96">s_1\ge s_2\ge ...\ge s_n\ge0</script>,通过分解可得惟一一组si<script type="math/tex" id="MathJax-Element-97">s_i</script>,称其为A的奇异值。
若A为一m*n矩阵,且Q为一m*m的正交矩阵,则||QA||F=||A||F<script type="math/tex" id="MathJax-Element-98">||QA||_F=||A||_F</script>
下面的代码显示了使用numpy对矩阵进行SVD分解的方法
import numpy as np
a = 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)为矩阵的奇异值中大于s1∗max(m,n)∗ϵ<script type="math/tex" id="MathJax-Element-99">s_1 * max(m,n) * \epsilon</script>的个数。其中s1为A最大的奇异值,且ϵ<script type="math/tex" id="MathJax-Element-100">\epsilon</script>为计算机的单位舍入误差。在matlab或numpy中rank都计算的是数值秩。
6.6 二次型
6.6.1 二次型
定义:一个二次(quadratic)方程为两个变量x和y的方程
可以写为
令x=[xy]<script type="math/tex" id="MathJax-Element-103">x = \left[ \matrix{x \cr y} \right]</script> 和A=[abbc]<script type="math/tex" id="MathJax-Element-104">A=\left[\matrix{a&b \cr b&c} \right]</script>,则
称其为与二次方程相关的二次型。
上面的二次方程对应的图形为圆锥曲线(conic section)。圆,椭圆,双曲线,抛物线均可由其表示。
主轴定理:若A为一实对称的n*n矩阵,则存在一个变量变换u=QTx<script type="math/tex" id="MathJax-Element-106">u=Q^Tx</script>使得xTAx=uTDu<script type="math/tex" id="MathJax-Element-107">x^TAx = u^TDu</script>,其中D为一对角矩阵。
6.6.2 正定
定义:一个实对称矩阵A称
- 正定的(positive definite),若对Rn<script type="math/tex" id="MathJax-Element-108">R^n</script>中所有非零向量x,xTAx>0<script type="math/tex" id="MathJax-Element-109">x^TAx>0</script>
- 负定的(negative definite),若对Rn<script type="math/tex" id="MathJax-Element-110">R^n</script>中所有非零向量x,xTAx<0<script type="math/tex" id="MathJax-Element-111">x^TAx<0</script>
- 半正定的(positive semidefinite),若对Rn<script type="math/tex" id="MathJax-Element-112">R^n</script>中所有非零向量x,xTAx≥0<script type="math/tex" id="MathJax-Element-113">x^TAx \ge 0</script>
- 半负定的(negative semidefinite),若对Rn<script type="math/tex" id="MathJax-Element-114">R^n</script>中所有非零向量x,xTAx≤0<script type="math/tex" id="MathJax-Element-115">x^TAx \le 0</script>
- 不定的(indefinite),若对Rn<script type="math/tex" id="MathJax-Element-116">R^n</script>中所有非零向量x,xTAx<script type="math/tex" id="MathJax-Element-117">x^TAx</script>有不同的符号
定理:若A为n阶实对称矩阵,A是正定的,当且仅当其特征值均为正
6.7 正定矩阵
前主子矩阵:给定n*n的矩阵A,令Ar<script type="math/tex" id="MathJax-Element-118">A_r</script>表示将A的最后n-r行和列删去后得到的矩阵,称其为A的r阶前主子矩阵(leading principal submatrix)。
对称正定矩阵的性质:
- 若A为一对称正定矩阵,则A是非奇异的,det(A)>0
- 若A为一对称正定矩阵,则A的前主子矩阵A1,A2,...,An<script type="math/tex" id="MathJax-Element-119">A_1,A_2,...,A_n</script>均为正定的。
- 若A为一对称正定矩阵,则A可仅使用第三类行变换化为上三角矩阵,且主元全为正。
- 若A为一对称正定矩阵,则A可分解为乘积LDLT<script type="math/tex" id="MathJax-Element-120">LDL^T</script>,其中L为下三角的,其对角线上元素为1,且D为一个对角矩阵,其对角元素均为正的。
- 若A为一对称正定矩阵,则A可分解为一个乘积LLT<script type="math/tex" id="MathJax-Element-121">LL^T</script>,其中L为下三角的,其对角线元素均为正的。此分解称为cholesky分解。
下面的代码演示了使用numpy对矩阵进行cholesky分解的方法
a = np.array([[4,2],[2,10]])
l = np.linalg.cholesky(a)
print l #[[2,0],[1,3]]
更多推荐
所有评论(0)