首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LAPACK QR分解

LAPACK QR分解
EN

Stack Overflow用户
提问于 2017-08-07 19:06:33
回答 1查看 543关注 0票数 0

我正在尝试从LAPACK zgeqrfzungqr例程中获取Q矩阵。

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

代码语言:javascript
复制
//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矩阵必须是正交的,所以Q*Q'=I

这段代码有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 02:43:12

我用zunmqr而不是znugqr解决了这个问题。

尽管我真的不知道为什么zungqr不能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45545436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档