返回目录

R_Jacobi.m

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

文件预览

function [Ak,Qk,k]=R_Jacobi(A,X)
% Givens旋转相似变换的雅可比方法,如果矩阵对称,则分解为对角矩阵
    [m,n]=size(A);
    C2=1;Rk=eye(n);k=0;
    switch X
        case 1
         fun=@triu;option=1;%旋转变成L矩阵
        case 2
         fun=@tril; option=-1;%旋转变成U矩阵
    end

    while abs(C2)>1e-8
       A1 = fun(A,option);
       [C1,I1]=max(abs(A1));[C2,j]=max(C1);i=I1(j);%寻绝对值最大值位置
       dij=(A(i,i)-A(j,j))/2/A(i,j);
       t=sign(dij)/(abs(dij)+sqrt(1+dij^2));
       c=1/(sqrt(1+t^2));s=t*c;
       R=eye(n);R(i,i)=c;R(i,j)=s;R(j,i)=-s;R(j,j)=c;
       A=R*A*R';
       Rk=R*Rk;
       k=k+1;%计算迭代次数
    end 
       Ak=A;Qk=Rk';