【问题标题】:calling R function "optim" from C从 C 调用 R 函数“优化”
【发布时间】:2012-09-27 17:37:38
【问题描述】:

我是 C 新手。

我正在尝试使用 C 中的 optim 函数。根据“编写 R 扩展”第 5.8 节,Nelder Mead 方法需要 16 个参数:

void nmmin(int n, double *xin, double *x, double *Fmin, optimfn fn,
           int *fail, double abstol, double intol, void *ex,
           double alpha, double beta, double gamma, int trace,
           int *fncount, int maxit);

据我了解,与 R 接受函数参数中的默认值不同,C 要求函数的用户提供所有参数。 尽管我阅读了 optim hep page,但我仍然无法理解其中一些参数的含义,即:

  • 失败
  • 进入
  • fncount

如果有人能告诉我所有论点的描述在哪里,我非常感激。

附言

以下是我弄清楚它们是什么的论点:

  • n:参数个数,
  • xin:参数的初始值
  • x: 存储退出时的最终参数,带 fi
  • Fmin:目标函数的最终值
  • fn:目标函数
  • abstol:绝对容差
  • maxit:最大迭代次数
  • trace:非负整数。如果是肯定的,则会生成有关优化进度的跟踪信息。

以下是 Nelder Mead 方法特有的一些参数:

  • alpha:R 优化函数使用 = 1

  • beta:R 优化函数使用 = 0.5

  • gamma:R 优化函数使用 = 2 (我通过阅读优化函数代码找到了这些默认值)

【问题讨论】:

    标签: c r


    【解决方案1】:

    fail - 如果函数失败则返回 true

    intol - 用户初始化的转换容差

    ex - 传递给优化函数 (fn) 的数据

    alpha - 反射系数

    beta - 收缩和减少因子

    伽玛 - 扩展因子

    fncount - 接收优化函数在迭代循环中被调用的次数

    您可以在此处查看这些参数的使用方式:

    http://fossies.org/dox/R-2.15.1/optim_8c_source.html#l00674

    比如 inl 就是这样使用的:

    convtol = intol * (fabs(f) + intol);
    if (trace) Rprintf("  Scaled convergence tolerance is %g\n", convtol);
    

    这里有更多关于 Nelder-Mead 算法的详细信息,使用 Pascal 代码:

    http://books.google.com/books?id=M9hTn3UAheQC&pg=PA173

    (计算机的紧凑数值方法:John C. Nash 的线性代数和函数最小化)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 2014-11-25
      • 1970-01-01
      • 2013-11-15
      • 2012-06-14
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多