c - 使用 GSL 的未知类型名称

标签 c gsl

我正在尝试编译以下 C 代码:

struct data {
  size_t n;
  double * y;
  double * sigma;
};

int
expb_f (const gsl_vector * x, void *data, 
        gsl_vector * f)
{
  size_t n = ((struct data *)data)->n;
  double *y = ((struct data *)data)->y;
  double *sigma = ((struct data *) data)->sigma;

  double A = gsl_vector_get (x, 0);
  double lambda = gsl_vector_get (x, 1);
  double b = gsl_vector_get (x, 2);

  size_t i;

  for (i = 0; i < n; i++)
    {
      /* Model Yi = A * exp(-lambda * i) + b */
      double t = i;
      double Yi = A * exp (-lambda * t) + b;
      gsl_vector_set (f, i, (Yi - y[i])/sigma[i]);
    }

  return GSL_SUCCESS;
}

int
expb_df (const gsl_vector * x, void *data, 
         gsl_matrix * J)
{
  size_t n = ((struct data *)data)->n;
  double *sigma = ((struct data *) data)->sigma;

  double A = gsl_vector_get (x, 0);
  double lambda = gsl_vector_get (x, 1);

  size_t i;

  for (i = 0; i < n; i++)
    {
      /* Jacobian matrix J(i,j) = dfi / dxj, */
      /* where fi = (Yi - yi)/sigma[i],      */
      /*       Yi = A * exp(-lambda * i) + b  */
      /* and the xj are the parameters (A,lambda,b) */
      double t = i;
      double s = sigma[i];
      double e = exp(-lambda * t);
      gsl_matrix_set (J, i, 0, e/s); 
      gsl_matrix_set (J, i, 1, -t * A * e/s);
      gsl_matrix_set (J, i, 2, 1/s);
    }
  return GSL_SUCCESS;
}

int
expb_fdf (const gsl_vector * x, void *data,
          gsl_vector * f, gsl_matrix * J)
{
  expb_f (x, data, f);
  expb_df (x, data, J);

  return GSL_SUCCESS;
}

我的来源是http://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-Nonlinear-Least_002dSquares-Fitting.html#Example-programs-for-Nonlinear-Least_002dSquares-Fitting

问题是,每当我尝试编译它时,都会收到以下错误“alt.c:8:1:错误:未知类型名称‘gsl_vector’ expb_f (const gsl_vector * x, void *data,"

我不确定如何解决这个问题,非常感谢任何建议。

最佳答案

您需要包含 Gnu Scientific Library,xxx 以获得适当的包含。

#include <gsl/xxx.h>

关于c - 使用 GSL 的未知类型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061340/

相关文章:

gcc - 使用 g++ 编译 GSL odeiv2

c++ - 使用 gsl 库并行化线性代数

c++ - 我有内存不一致吗?苹果系统

c - 字符串表如何工作?

c++ - 性能断言

c - 为什么这个声明可以编译?

Ubuntu 上的 R BayesVarSel 安装

c++ - 即使我解压了 4.8.1,GCC -v 也会返回 GCC 4.7.3?

C程序输出数组最大元素和数组最大元素的索引

c++ - stdlib.h 中的 rand 有多糟糕?