首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从C调用R函数"optim“

从C调用R函数"optim“
EN

Stack Overflow用户
提问于 2012-10-07 01:13:55
回答 1查看 926关注 0票数 0

我是C的新手。

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

代码语言:javascript
运行
复制
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页面,但我仍然很难理解其中一些论点的含义,即:

  • 失败
  • intol
  • 例如
  • fncount

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

附注:

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

  • n:参数的数目,
  • 辛:参数的初始值
  • x:出口处最后参数的存储,带有fi
  • Fmin:目标函数的最终值
  • fn:目标函数
  • abstol:绝对容忍
  • maxit:最大迭代次数
  • 跟踪:非负整数。如果为正,则生成关于优化过程的跟踪信息。

以下是Nelder方法的一些具体论点:

  • alpha: r optim函数使用=1
  • beta: r optim函数使用= 0.5
  • gamma: r optim函数使用=2(我通过读取代码找到了这些默认值)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-07 01:35:54

失败-如果函数失败,则接收true

用户初始化转换公差

前数据传递给优化函数(fn)

α-反射因子

β-收缩和还原因子

γ-扩张因子

接收迭代循环中调用优化函数的次数。

您可以在这里看到如何使用这些参数:

source.html#l00674

例如,intol的用法如下:

代码语言:javascript
运行
复制
convtol = intol * (fabs(f) + intol);
if (trace) Rprintf("  Scaled convergence tolerance is %g\n", convtol);

这里有一些关于Nelder算法的更多细节,使用Pascal代码:

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

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

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

https://stackoverflow.com/questions/12765304

复制
相关文章

相似问题

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