首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gsl_interp的gsl_min_fminimizer

使用gsl_interp的gsl_min_fminimizer
EN

Stack Overflow用户
提问于 2013-07-24 18:24:26
回答 1查看 127关注 0票数 0

考虑来自minimzation上的GNU网站的以下示例。假设我需要从一组点(xa,ya)中插值目标函数来获得目标函数double fn2(double x){gsl_interp_eval( myinterp, xa[],ya[],x),而不是给定的目标函数。问题是如何避免每次调用时都必须在目标函数fn2内设置插值myinterp对象,而是将其作为参数传递给目标函数。我已经尝试了一个结构,但是没有成功。

我猜更一般的提问方式是“如何将类型为gsl_interp的对象传递给类型为gsl_function的函数?”

代码语言:javascript
复制
#include <stdio.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_min.h>

double fn1 (double x, void * params)
{
  return cos(x) + 1.0;
}

int
main (void)
{
  int status;
  int iter = 0, max_iter = 100;
  const gsl_min_fminimizer_type *T;
  gsl_min_fminimizer *s;
  double m = 2.0, m_expected = M_PI;
  double a = 0.0, b = 6.0;
  gsl_function F;

  F.function = &fn1;
  F.params = 0;

  T = gsl_min_fminimizer_brent;
  s = gsl_min_fminimizer_alloc (T);
  gsl_min_fminimizer_set (s, &F, m, a, b);

  printf ("using %s method\n",
          gsl_min_fminimizer_name (s));

  printf ("%5s [%9s, %9s] %9s %10s %9s\n",
          "iter", "lower", "upper", "min",
          "err", "err(est)");

  printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
          iter, a, b,
          m, m - m_expected, b - a);

  do
    {
      iter++;
      status = gsl_min_fminimizer_iterate (s);

      m = gsl_min_fminimizer_x_minimum (s);
      a = gsl_min_fminimizer_x_lower (s);
      b = gsl_min_fminimizer_x_upper (s);

      status 
        = gsl_min_test_interval (a, b, 0.001, 0.0);

      if (status == GSL_SUCCESS)
        printf ("Converged:\n");

      printf ("%5d [%.7f, %.7f] "
              "%.7f %+.7f %.7f\n",
              iter, a, b,
              m, m - m_expected, b - a);
    }
  while (status == GSL_CONTINUE && iter < max_iter);

  gsl_min_fminimizer_free (s);

  return status;
}
EN

回答 1

Stack Overflow用户

发布于 2013-07-24 20:35:16

对不起,我犯了一个错误,希望没有浪费任何人的时间。我在结构中声明了类似于

代码语言:javascript
复制
struct myint = { double a; gsl_interp int;};

也就是说,我的gsl_interp对象的名字是int。这并不是很聪明,因为int当然是一个类型声明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17831297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档