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';