我正在尝试在我的项目中使用GSL complex numbers
,complex vectors
和complex matrices
。我使用的是VS2010,我在配置属性> C / C ++> General>其他包含目录中添加了库的地址。但我有一个愚蠢的问题。据我了解,我无法使用=
为彼此分配两个gsl_complex
,gsl_vector_complex
或gsl_matrix_complex
。
对于向量,我必须使用gsl_vector_complex_set
和矩阵gsl_matrix_complex_set
。但是对于gsl_complex,我只找到 GSL_SET_COMPLEX ,其中我应该将实部和虚部分别作为2个参数给出:
GSL_SET_COMPLEX (zp, real, imaginary)
在我的代码中我有这样的功能:
gsl_complex cmx, cmx2;
void vector_complex_exp(gsl_vector_complex *v)
{
for (i = 0; i < v->size; i++)
{
gsl_vector_complex_set(v, i, gsl_complex_exp(gsl_vector_complex_get(v, i)));
}
}
使用此功能,我收到以下错误:
错误LNK1120:2未解析的外部参考。
错误LNK2001:未解析的外部符号“_hypot”。
错误LNK2001:未解析的外部符号“_log1p”。
错误LNK2001:未解析的外部符号“_log1p”。
我不明白这些错误背后的原因。但我改写了我的代码:
void vector_complex_exp(gsl_vector_complex *v)
{
for (i = 0; i < v->size; i++)
{
cmx = gsl_vector_complex_get(v, i);
//cmx2 = gsl_complex_exp(cmx);
gsl_vector_complex_set(v, i, cmx2);
}
}
这里当for的第二行被注释时,没有错误。但当我取消注释时,我得到以下内容:
错误LNK1120:2个未解析的外部参考。
错误LNK2001:未解析的外部符号“_log1p”。
错误LNK2019:在函数“_gsl_complex_div”中引用未解析的外部符号“_hypot”。
错误LNK2019:在函数“_gsl_complex_logabs”中引用未解析的外部符号“_log1p”。
我的代码中没有_gsl_complex_div
或_gsl_complex_logabs
函数。所以我很确定问题出在这里。但我也不能在这里使用GSL_SET_COMPLEX。
有人可以帮我吗?难道没有办法直接为gsl_complex赋值吗?
答案 0 :(得分:0)
最好在这里发布所有代码,因此,我立即使用了GSL the lowest of the examples中的代码。我做了一些小改动:
#include <stdio.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_eigen.h>
int main(void)
{
double data[] = { -1.0, 1.0, -1.0, 1.0,
-8.0, 4.0, -2.0, 1.0,
27.0, 9.0, 3.0, 1.0,
64.0, 16.0, 4.0, 1.0 };
gsl_matrix_view m
= gsl_matrix_view_array(data, 4, 4);
gsl_vector_complex *eval = gsl_vector_complex_alloc(4);
gsl_matrix_complex *evec = gsl_matrix_complex_alloc(4, 4);
gsl_eigen_nonsymmv_workspace * w = gsl_eigen_nonsymmv_alloc(4);
gsl_eigen_nonsymmv(&m.matrix, eval, evec, w);
gsl_eigen_nonsymmv_free(w);
gsl_eigen_nonsymmv_sort(eval, evec, GSL_EIGEN_SORT_ABS_DESC);
{
int i, j;
for (i = 0; i < 4; i++)
{
gsl_complex eval_i
= gsl_vector_complex_get(eval, i);
gsl_vector_complex_view evec_i
= gsl_matrix_complex_column(evec, i);
printf("\n eigenvalue = %g + %gi\n",
GSL_REAL(eval_i), GSL_IMAG(eval_i));
printf(" eigenvector = \n");
for (j = 0; j < 4; ++j)
{
gsl_complex z =
gsl_vector_complex_get(&evec_i.vector, j);
printf(" %g + %gi\n", GSL_REAL(z), GSL_IMAG(z));
}
}
}
gsl_vector_complex_free(eval);
gsl_matrix_complex_free(evec);
system("pause");
return 0;
}
Output of this code: (从红色箭头下方开始,与GSL示例中的预期输出不匹配) 要获取输出,您需要使用IDE(我使用Visual Studio 2015):
祝你好运!