我正在尝试使用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);
但我得到的输出是错误的:
我试图用调试器跟踪内存的演变,看起来当我达到3时,我丢失了来自Data和temp的所有元素:
以下是我的包含:
#include <stdio.h> #include <iostream> #include <gsl/gsl_vector.h> #include <gsl/gsl_complex.h> #include <gsl/gsl_complex_math.h>
答案 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
N
和i
GSL。