LAPACK QR分解

时间:2017-08-07 11:06:33

标签: c++ matrix lapack

我正在尝试从LAPACK zgeqrfzungqr例程中获取Q-Matrix。

我有一个Nw-by-Nw复杂矩阵,其列上有非正交向量。这是我的C ++代码。 (矩阵名为vr_tr)

//QR Fact.
complex<double> TAU[Nw*Nw];
zgeqrf_(&Nw, &Nw, vr_tr, &Nw, TAU, &wkopt, &lwork, &info);
lwork = (int)wkopt.real();
work = new complex<double> [lwork];
zgeqrf_(&Nw, &Nw, vr_tr, &Nw, TAU, work, &lwork, &info);
zungqr_(&Nw, &Nw, &Nw, vr_tr, &Nw, TAU, &wkopt, &lwork, &info);
lwork = (int)wkopt.real();
work = new complex<double> [lwork];
zungqr_(&Nw, &Nw, &Nw, vr_tr, &Nw, TAU, work, &lwork, &info);

//Checking if vr_tr * vr_tr' = I
complex<double> one = 1,zer=0,res[Nw*Nw]; char Tchar = 'T', Nchar = 'N';
zgemm_( &Nchar, &Tchar, &Nw, &Nw, &Nw, &one, vr_tr, &Nw, vr_tr, &Nw, &zer, res, &Nw );
for(i=0;i<Nw;i++){
    for(j=0;j<Nw;j++){
        cout<<res[i*Nw+j]<<"\t";
    }
    cout<<"\n\n";
}

运行此代码后得到的不是单位矩阵,因为它应该从zgeqrf计算QR分解并从zungqr获得Q矩阵,而Q-matrix有是正交的Q*Q'=I

此代码有什么问题?

1 个答案:

答案 0 :(得分:0)

我使用了zunmqr而不是znugqr,并且修复了它。

虽然老实说我不知道​​为什么zungqr没有工作。