从C调用R函数“optim”

时间:2012-10-07 01:13:56

标签: c r

我是C的新手。

我正在尝试使用C语言中的优化函数。根据“编写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要求函数的用户提供所有参数。 虽然我阅读了极好的页面,但我仍然无法理解其中一些论点的含义,即:

  • 失败
  • intol
  • fncount

我非常感谢任何人都可以指导我所有论点的描述。

P.S。

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

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

以下是针对Nelder Mead方法的一些论据:

  • alpha:R optim函数使用= 1

  • beta:R optim函数使用= 0.5

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

1 个答案:

答案 0 :(得分:2)

失败 - 如果函数失败则收到

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

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

alpha - 反射因子

beta - 收缩和减少因子

gamma - 扩展因子

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

您可以在此处查看如何使用这些参数:

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

例如,intol的使用方式如下:

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的线性代数和函数最小化)