Julia 矩阵QR分解和特征值

前言

在上一篇的PCA中使用了LinearAlgebra中封装的函数求取的特征值和特征向量。在此学习一下特征值的数值求解算法,主要参考[1]。矩阵特征值的数值求解方法中,一般有求部分特征值和特征向量的幂法和反幂法,以及求取全部特征值的QR分解方法。在此关注QR分解方法。注意内容较长,总体思路和方法来自参考文献[1]。

  • QR分解,是把矩阵分解为正交矩阵和三角矩阵的乘积,其中关键点在于正交矩阵的求法。

  • 正交矩阵的求解可以使用施密特正交化进行实现,需要理解施密特正交化的原理和思路。

最后回溯:由施密特正交化->>QR分解->>矩阵特征值->>特征向量矩阵 。

1. 施密特正交

施密特方法是对一组向量进行正交化。给定一组输入的m维向量,目的找出正交坐标系统,获取由这些向量张成的空间。
给定n个线性无关的向量,找到n个彼此垂直的单位向量。

(1) 利用施密特正交求出正交矩阵Q

假设存在 n n n个线性无关的 m m m维向量
A 1 , A 2 , ⋯   , A n A_{1},A_{2},\cdots,A_{n} A1,A2,,An

  • 1 1 1步:选定初始向量,归一化。

y 1 = A 1 y_{1}=A_{1} y1=A1

p 1 = y 1 ∣ ∣ y 1 ∣ ∣ 2 p_{1}=\dfrac{y_{1}}{||y_{1}||_{2}} p1=y12y1

  • 2 2 2步:下一个向量例如 A 2 A_{2} A2,减去该向量在所有已知的正交向量集 ( p 1 , p i , ⋯   ) (p_{1},p_{i},\cdots) (p1pi,)上的投影分量,再进行归一化得到当前的正交向量。

投影分量如何计算?利用向量的内积 c o s ( θ ) = < a , b > ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 cos(\theta)=\dfrac{<a,b>}{||a||_{2}||b||_{2}} cos(θ)=a2b2<a,b>,此处符号 < a , b > <a,b> <a,b>为向量内积。

由于正交向量 p i p_{i} pi的模长,也即是2范数为1,此时 A j A_{j} Aj在向量 p i p_{i} pi上的投影系数为 < A j , p i > ∣ ∣ A j ∣ ∣ 2 \dfrac{<A_{j},p_{i}>}{||A_{j}||_{2}} Aj2<Aj,pi>,也即是 p i T A j p_{i}^{T}A_{j} piTAj,注意此为一个数值标量。进一步可得到, A j A_{j} Aj在向量 p i p_{i} pi上的投影分量为 p i ( p i T A j ) p_{i}(p_{i}^{T}A_{j}) pi(piTAj)

y 2 = A 2 − p 1 ( p 1 T A 2 ) y_{2}=A_{2}-p_{1}(p_{1}^{T}A_{2}) y2=A2p1(p1TA2)

p 2 = y 2 ∣ ∣ y 2 ∣ ∣ 2 p_{2}=\dfrac{y_{2}}{||y_{2}||_{2}} p2=y22y2

  • 以此类推,第 k k k步,

y k = A k − p 1 ( p 1 T A k ) − ⋯ − p k − 1 ( p k − 1 T A k ) y_{k}=A_{k}-p_{1}(p_{1}^{T}A_{k})-\cdots -p_{k-1}(p_{k-1}^{T}A_{k}) yk=Akp1(p1TAk)pk1(pk1TAk)

p k = y k ∣ ∣ y k ∣ ∣ k p_{k}=\dfrac{y_{k}}{||y_{k}||_{k}} pk=ykkyk

  • 最终得出正交矩阵为 Q = ( p 1 , p i , ⋯   , p n ) Q=(p_{1},p_{i},\cdots,p_{n}) Q=(p1pi,,pn),注意此时的维度为 m ∗ n m*n mn,即 m m m n n n列。

(2) 求出上三角矩阵R

由以上求正交矩阵的过程,反推:
A 1 = p 1 ∗ ∣ ∣ y 1 ∣ ∣ 2 A_{1}=p_{1}*||y_{1}||_{2} A1=p1y12

A 2 = p 2 ∗ ∣ ∣ y 2 ∣ ∣ 2 + p 1 ∗ ( p 1 T A 2 ) A_{2}=p_{2}*||y_{2}||_{2}+p_{1}*(p_{1}^{T}A_{2}) A2=p2y22+p1(p1TA2)

A k = p k ∗ ∣ ∣ y k ∣ ∣ 2 + p 1 ∗ ( p 1 T A k ) + ⋯ + p k − 1 ∗ ( p k − 1 T A k ) A_{k}=p_{k}*||y_{k}||_{2}+p_{1}*(p_{1}^{T}A_{k})+\cdots+p_{k-1}*(p_{k-1}^{T}A_{k}) Ak=pkyk

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值