从GSL多根函数返回变量

时间:2015-04-16 16:38:46

标签: c gsl

假设我有一个定义一组N个方程的函数,我想得到N个未知数,将这些方程设置为零。我通常这样做的方法是使用GSL多根函数,其返回由GLS_SUCCESS整数定义,该整数描述是否可以计算函数。这将是GSL指南中的这种功能的一个例子。

#include <stdlib.h>
#include <stdio.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_multiroots.h>

struct rparams
  {
    double a;
    double b;
  };

int
rosenbrock_f (const gsl_vector * x, void *params, 
              gsl_vector * f)
{
  double a = ((struct rparams *) params)->a;
  double b = ((struct rparams *) params)->b;

  const double x0 = gsl_vector_get (x, 0);
  const double x1 = gsl_vector_get (x, 1);

  const double y0 = a * (1 - x0);
  const double y1 = b * (x1 - x0 * x0);

  gsl_vector_set (f, 0, y0);
  gsl_vector_set (f, 1, y1);

  return GSL_SUCCESS;
}

假设我对将值设置为零的N个变量感兴趣,我也对在函数内部计算的变量感兴趣。例如,让double c = a + b,并假设该操作在rosenbrock_f函数内执行。如何从main访问c?一种显而易见的方法是将其声明为全局变量。还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

另一种方法是让rparams结构的附加成员包含你想要存储的值。

然后,您可以在每次调用rosenbrock_f时修改它的价值,然后您就可以在main功能中访问它了。