返回目录

R_QLR.m

text/plain
748 bytes
2025-10-22 16:16:00

文件预览

function [Q,A,k]=R_QLR(A,X)
% Givens旋转变换的矩阵分解 的QL(R)方法
    [m,n]=size(A);
    C2=1;Q=eye(n);k=0;

    switch X
        case 1
         fun=@triu;option=1;opbreak=1;%取矩阵上半部分,QL分解
        case 2
         fun=@tril; option=-1;opbreak=n;%取矩阵下半部分,QR分解
    end
    
    while abs(C2)>1e-10
         A1 = fun(A,option);
         [C1,I1]=max(abs(A1));[C2,j]=max(C1);i=I1(j);%寻绝对值最大值位置
         if j==opbreak
             break;
         end
         d=A(i,j)/A(j,j);       
         c=1/(sqrt(1+d^2));s=-d*c;
         R=eye(n);R(i,i)=c;R(i,j)=s;R(j,i)=-s;R(j,j)=c;
         Q=Q*R';
         A=R*A;
         k=k+1;%计算迭代次数
    end