【问题标题】:is there an R function for finding the local minima of a bivariate function?是否有用于查找二元函数的局部最小值的 R 函数?
【发布时间】:2020-07-22 04:59:27
【问题描述】:

我有以下功能:

我有兴趣使用 R 中的代码找到这个双变量函数的所有 4 个局部最小值。我该怎么做?

【问题讨论】:

  • 您在寻找数值优化吗?在这种情况下,可以使用optim。您需要多次更改初始点才能找到 4 个局部最小值
  • 是的,数值优化应该没问题@linog
  • 非常感谢,我用 optim 管理了。您是否知道另一种方法,尽管它只输出局部最小值而无需输入初始点? @linog
  • 数值例程取决于起点。如果你想确定你的最小值,你需要覆盖空间中的不同点。在我提出的解决方案中,点是在 R2 中随机选取的
  • 如果您对答案感到满意,您能接受吗?

标签: r function rstudio minima


【解决方案1】:

如果您对数值优化感兴趣,可以使用多种方法。最直接的就是使用optim。默认情况下,这是一个 Nelder-Mead 单纯形法,但也实现了其他方法。

您需要从不同的起始值开始以收敛到不同的终点。我可以向您提出以下建议:

func <- function(a){
  x <- a[1]
  y <- a[2]
  return(
     0.5*(x^4 - 16*x^2 + 5*x + y^4 - 16*y^2 + 5*y)
  )
}

t0 <- rnorm(100, sd = 20)
t1 <- rnorm(100, sd = 20)

points <- do.call(rbind, lapply(1:100, function(i) optim(par = c(t0[i],t1[i]), fn = func)$par))

如果您想以图形方式查看您的解决方案:

library(ggplot2)
ggplot(data.frame(points)) + geom_point(aes(x = X1, y = X2))

你在这个输出中有四个局部最小值

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 2018-10-09
    • 2022-11-30
    • 1970-01-01
    • 2015-02-01
    • 2021-07-17
    相关资源
    最近更新 更多