QR分解——复数域的Givens旋转
针对复矩阵X的第i行和第j行做Givens旋转。
使得,
-
第i行变为一个实数:yi=sqrt(|xi|2+|xj|2),
-
第j行变为0 :yj=0,
-
其他行不变:yk=xk
理论参考:复矩阵的Givens变换及其QR分解
简单以matlab代码为例子的核心代码如下:(x为矩阵X的某一列向量)
x=[1;2+2i;3-2i;4+2i;5-2i]; % 输入数据
myGivens(x,2,3);
function [G,y]=myGivens(x,i,j)
xi=x(i);
xj=x(j);
r=sqrt(abs(xi^2)+abs(xj^2));
cost=xi/r;
sint=xj/r;
G=eye(length(x)); % 构建Givens旋转矩阵
G(i,i)=cost';
G(i,j)=sint';
G(j,i)=-sint;
G(j,j)=cost;
y=x;
y([i,j])=[r,0]; % 注:G*x=y
disp(G*x-y);
end