在GSL C ++中使用复杂向量

时间:2016-01-24 14:26:07

标签: c++ gsl

我正在尝试使用GSL库来处理复杂的值。 在下面的代码中,我尝试创建一个复杂的向量,用相同的值填充它,然后读取它。

int N = 5;
gsl_vector_complex * Data = gsl_vector_complex_alloc(N);
gsl_complex temp = gsl_complex_rect(1,2);

gsl_vector_complex_set_all(Data,temp);

for(int i =0;i<N;i++)
{
cout << GSL_REAL(gsl_vector_complex_get(Data,i)) << "  " << GSL_IMAG(gsl_vector_complex_get(Data,i)) << endl;
}

gsl_vector_complex_free(Data);

但我得到的输出是错误的:

enter image description here

我试图用调试器跟踪内存的演变,看起来当我达到3时,我丢失了来自Data和temp的所有元素:

enter image description here

enter image description here

以下是我的包含:

#include <stdio.h>
#include <iostream>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_complex.h>
#include <gsl/gsl_complex_math.h>

1 个答案:

答案 0 :(得分:1)

我认为您的编译工作流程有问题。事实上,我试图通过编译来重现你的问题

g++ complex.cpp -lgsl -lgslcblas

使用以下文件complex.cpp:

#include <iostream>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_complex.h>
#include <gsl/gsl_complex_math.h>

using namespace std;

int main () {
    int N = 5;
    gsl_vector_complex * Data = gsl_vector_complex_alloc( N );
    gsl_complex temp = gsl_complex_rect( 1, 2 );

    gsl_vector_complex_set_all( Data, temp );

    for ( int i = 0; i < N ; i++ ) {
        cout
            << GSL_REAL( gsl_vector_complex_get( Data, i ) )
            << " "
            << GSL_IMAG( gsl_vector_complex_get( Data, i ) )
            << endl;
    }

    gsl_vector_complex_free( Data );
}

我的结果是

1 2
1 2
1 2
1 2
1 2

正如任何人所期望的那样。

不相关的评论:在编码风格方面,如果您使用的是最新版本,则可能需要使用size_t代替int Ni GSL。