实Schur分解

本文介绍了实Schur分解的概念,它是通过正交矩阵将任意矩阵转化为拟上三角矩阵的过程,常用于计算特征值分解和SVD。文章详细讲解了QR算法及其优化,包括基于位移的QR算法和Francis QR算法,并提供了Matlab代码示例,展示了如何实现这些算法。
摘要由CSDN通过智能技术生成

    前面已经说过LU,Cholesky和QR分解,这次介绍的是实Schur分解。对这个分解的定义是任意一个矩阵A,可有如下形式的分解:

              U*A*U’ = B;其中B是拟上三角矩阵,拟上三角矩阵的定义是在矩阵的对角线上存在2x2大小的矩阵,而且矩阵U是正交矩阵,因为矩阵A的特征值和B的特征值相同。而且A的特征值出现在B的对角线上。计算特征值分解和SVD都依靠这个算法做最基本的处理,然后根据不同的任务有不同的处理。

计算schur分解的方法是是QR算法,这个算法的原理相当的简单,可以用如下的伪代码表示:

for i = 1 … 

  A(i-1)= QR

  A(i) = R*Q

end

这段代码所做的变化类似于A(i) = R*Q = (Q’)*Q*R*Q = (Q’)*A(i-1)*Q;因此这段代码的基本思想就是使用正交矩阵Q不停的对矩阵A做相似变化。在这样的变化中将矩阵A的下半三角矩阵中的数全部消去。但是在实际中使用这样的算法是不现实的,因为每一次QR分解都需要大量的计算,同时完全的矩阵相乘R*Q也需要大量的计算。对这种方法的改进是首先将矩阵A化为Hessenberg型,然后对Hessenbert计算QR分解,对应的code如下:

function [H, U] = zhess(A)

%for any matrix A, turn it into a upper hessenberg matrix by orthogonal 

%transformation

 

[m, n] = size(A);

 

if m ~= n

    error('support square matrix only')

end

 

H = A;

U = eye(n);

 

for k=1:n-2

    

    %compute the householder matrix

    [v, beta] = zhouse(H(k+1:end, k));

    temp_U = eye(n);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值