2015-12-11 4 views
0

Я написал чрезвычайно простую функцию в Eigen, которая должна создавать линейно независимые векторы. Вместо этого он последовательно создает нулевые векторы. Я ожидаю, что решение будет смутно простым, но я просто этого не вижу.Неправильная установка вектора в EIGEN

Почему на самом деле компоненты моего вектора mpbv не все равны cos (0) = 1,00 (с точностью до моего значения pi)?

Вместо этого я получаю:

[email protected]:~/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 
[email protected]:~/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); 
} 

/* --- --- */ 

ответ

2

Изменение подписи функции следующим образом:

int basisvector(int m, VectorXh & result) // note the ampersand 

Что вы делаете, передавая result по значению в функцию. Изменения, которые вы вносите внутри функции в аргумент result, теряются после завершения функции.

+0

спасибо. Не могу поверить, что я снова это сделал :( – Ludi

Смежные вопросы