.dot()产品用于Eigen c ++中的VectorXcd

时间:2015-07-29 18:11:32

标签: c++ eigen

我正在试图弄清楚这是否是Eigen中的一个错误或者我做错了什么。我只想要两个复矢量[1,i]和[1,-i]的点积。答案是1 * 1 + i *( - i)= 2.但是Eigen给出零作为答案。请参阅以下代码:

#include <iostream>
#include <sstream>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <time.h> 
#include <stdio.h>
#include <map>
#include <sys/sysinfo.h>
#include <algorithm>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std; 

int main( void ){


    VectorXcd xd0(2); 
    complex<double> c_i( 0.0 , 1.0 ); 
    xd0[0] = 1.0 ;   
    xd0[1] =  c_i; 

    VectorXcd xd0conj = xd0.conjugate();
    cout <<" vec is \n" << xd0 <<endl;
    cout <<" conj vec is \n" << xd0conj <<endl;

    cout << "eigen dot = " << (xd0conj).dot(xd0 ) <<endl; 

    complex<double> outVal = 0.0; 
    for( int a=0; a<xd0.size(); a++){
        outVal += xd0[a]*xd0conj[a]; 
    }
    cout << "naive dot = " << outVal<<endl;

};

1 个答案:

答案 0 :(得分:3)

来自documentation

&#34; 如果标量类型是复数,则此函数返回埃尔米特(sesquilinear)点积,第一个变量中的共轭线性和第二个变量中的线性。 &#34;

经常使用此产品,例如quantum mechanics。 它计算了你所看到的conj(x)* y。我想你想要简单/普通的点:

cout << "eigen dot = " << xd0conj.transpose()*xd0 <<endl; 

此输出

eigen dot = (2,0)