c - 从 GSL 多根函数返回变量

标签 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?一种明显的方法是将其声明为全局变量。有替代方案吗?

最佳答案

另一种方法是在 rparams 结构中添加一个附加成员,其中包含您要存储的值。

然后,您可以在每次调用 rosenbrock_f 时修改它的值,并且可以在 main 函数中访问它。

关于c - 从 GSL 多根函数返回变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681003/

相关文章:

c - printf 的浮点值 10.1 的意外输出

c - Linux 内核的 free_list 如何初始化为指向空闲页面?

相同函数的 C const/非常量版本

c - C中http header 的正则表达式

c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back

C 编程 - 理解 bind()

c++ - g++ 编译与 gsl : library not found

g++ - 对于实际变换计算,FFTW 是否明显优于 GSL?

c++ - 为什么 MATLAB/Octave 在特征值问题中用 C++ 擦地板?

c++ - 使用 GSL 的非线性拟合