我编写了一个程序来找到一个Hessenberg矩阵,它使用住户变换与矩阵A正交等价。该程序正常工作,直到我开始使用Hermitian矩阵。通常,当使用埃尔米特矩阵时,hessenberg矩阵应该是三对角的,但是我的第一行的某些位置(当然在子对角线下方)只有零。谁能帮我? 我的户主功能定义为:
function [H,Q]=householder(A)
[m,n] = size(A);
Q=eye(n);
for k = 1:n-2
x=A(k+1:n,k);
[sz,szz] = size(x);
e_k = zeros(sz,1);
e_k(1)=1;
u = (x+sign(x(1))*norm(x)*e_k)/(norm(x+sign(x(1))*norm(x)*e_k));
I=eye(sz);
P=I-2*(u)*(u');
Q_temp=blkdiag(eye(k),P);
Q=Q_temp*Q;
A=(Q_temp')*A*(Q_temp);
end
H=A;
end
我做了一个随机的Hermitian矩阵:
function RHM=RandomHermitianMatrix(n)
A=complex(rand(n,n),(rand(n,n)*2)-1);
for k=1:n-1
vct=diag(A,k);
for l=1:n-k
A(l+k,l)=conj(vct(l));
end
end
RHM=A;
end
我用以下方法测试:
function message = test_householder_hermitian(n)
tic;
tst=RandomHermitianMatrix(n)
tstt=householder(tst)
toc
message='done';
end
非常感谢!