我正在试图弄清楚这是否是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;
};
答案 0 :(得分:3)
&#34; 如果标量类型是复数,则此函数返回埃尔米特(sesquilinear)点积,第一个变量中的共轭线性和第二个变量中的线性。 &#34;
经常使用此产品,例如quantum mechanics。 它计算了你所看到的conj(x)* y。我想你想要简单/普通的点:
cout << "eigen dot = " << xd0conj.transpose()*xd0 <<endl;
此输出
eigen dot = (2,0)