2015-04-16 51 views
2

假设我有一个函数定义了一组N个方程,并且我想获得将这些方程设置为零的N个未知数。我通常这样做的方式是使用GSL multiroot函数,返回值由整数GLS_SUCCESS定义,该函数描述函数是否可以计算。这将是GSL指南中这样一个功能的例子。从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?一种明显的方法是将其声明为全局变量。有其他选择吗?

回答

2

另一种方法是让rparams结构的其他成员包含要存储的值。

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