假设我有一个定义一组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?一种显而易见的方法是将其声明为全局变量。还有其他选择吗?
答案 0 :(得分:2)
另一种方法是让rparams
结构的附加成员包含你想要存储的值。
然后,您可以在每次调用rosenbrock_f
时修改它的价值,然后您就可以在main
功能中访问它了。