在 EIGEN 中错误地设置矢量
Setting vector incorrectly in EIGEN
我在 Eigen 中编写了一个极其简单的函数,它应该创建线性无关的向量。相反,它始终创建空向量。我希望解决方案非常简单,但我就是看不到它。
为什么我的向量mpbv的分量不都等于cos(0) =1.00(在我的pi值的精度内)?
相反,我得到:
ludi@ludi-M17xR4:~/Desktop/tests$ g++ -O3 -w -o medrealbv.x medrealbv.cc -L/usr/local/lib -lgsl -lgslcblas && ./medrealbv.x
basisvector =
3.11621e-317
2.0776e-317
6.95251e-310
ludi@ludi-M17xR4:~/Desktop/tests$
因此,每个组件的值都非常接近于零!我的程序如下。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Eigen/Dense>
#define helix 3
#define pi 3.14159
using namespace Eigen;
typedef Matrix<double, helix, 1> VectorXh;
/*-- DECLARATIONS --*/
int basisvector(int m, VectorXh result);
/*--- MAIN ---*/
int main()
{
VectorXh mpbv;
basisvector(0, mpbv);
std::cout << "basisvector =\n" << mpbv << std::endl;
return(0);
}
/* --- --- */
int basisvector(int m, VectorXh result)
{
int k;
double component;
for(k=0;k<helix;k++)
{
component =cos(m*k*2.0*pi/helix);
result(k) = component;
}
return(0);
}
/* --- --- */
将您的函数签名更改为:
int basisvector(int m, VectorXh & result) // note the ampersand
您正在做的是将 result
按值传递给函数。您在函数内部对 result
参数所做的更改将在函数结束后丢失。
我在 Eigen 中编写了一个极其简单的函数,它应该创建线性无关的向量。相反,它始终创建空向量。我希望解决方案非常简单,但我就是看不到它。
为什么我的向量mpbv的分量不都等于cos(0) =1.00(在我的pi值的精度内)?
相反,我得到:
ludi@ludi-M17xR4:~/Desktop/tests$ g++ -O3 -w -o medrealbv.x medrealbv.cc -L/usr/local/lib -lgsl -lgslcblas && ./medrealbv.x
basisvector =
3.11621e-317
2.0776e-317
6.95251e-310
ludi@ludi-M17xR4:~/Desktop/tests$
因此,每个组件的值都非常接近于零!我的程序如下。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Eigen/Dense>
#define helix 3
#define pi 3.14159
using namespace Eigen;
typedef Matrix<double, helix, 1> VectorXh;
/*-- DECLARATIONS --*/
int basisvector(int m, VectorXh result);
/*--- MAIN ---*/
int main()
{
VectorXh mpbv;
basisvector(0, mpbv);
std::cout << "basisvector =\n" << mpbv << std::endl;
return(0);
}
/* --- --- */
int basisvector(int m, VectorXh result)
{
int k;
double component;
for(k=0;k<helix;k++)
{
component =cos(m*k*2.0*pi/helix);
result(k) = component;
}
return(0);
}
/* --- --- */
将您的函数签名更改为:
int basisvector(int m, VectorXh & result) // note the ampersand
您正在做的是将 result
按值传递给函数。您在函数内部对 result
参数所做的更改将在函数结束后丢失。