是否有用于查找双变量函数局部最小值的 R 函数?
is there an R function for finding the local minima of a bivariate function?
我有以下功能:
我有兴趣使用 R 中的代码找到此双变量函数的所有 4 个局部最小值。我该怎么做?
如果您对数值优化感兴趣,您有几种可能的方法。最直接的就是用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))
您在此输出中有四个局部最小值
我有以下功能:
我有兴趣使用 R 中的代码找到此双变量函数的所有 4 个局部最小值。我该怎么做?
如果您对数值优化感兴趣,您有几种可能的方法。最直接的就是用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))
您在此输出中有四个局部最小值