假设我有一个定义一组 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/