我正在为我的学位做一些任务,并且遇到了一个多变量函数成像的问题。下列的:
fb<-function(x) {5*x[1]^2+2*x[1]*x[2]+4*x[2]^2+4*x[1]-2*x[2]-2}
> x<--50:50
> y<--50:50
> z<-outer(x,y,fb)
Error in FUN(X, Y, ...) : unused argument (Y)
不仅如此,我还需要找到一个具有最大点的最优值,但是当我尝试不使用向量时,它会给出下一个:
optim(c(0,0), fb, control=list(fnscale=-5))
Error in fn(par, ...) : argument "y" is missing, with no default
请指教。
看起来好像你有两个变量的函数,x[1]
并且x[2]
,你作为一个向量传递给你的函数,x
。这将导致输出矢量化出现问题。更好的写法是
fb <- function(x, y) {
5 * x^2 + 2*x * y + 4 * y^2 + 4 * x - 2 * y - 2
}
这使您可以将函数可视化为表面,例如使用persp
:
x <- -50:50
y <- -50:50
z <- outer(x, y, fb)
persp(x, y, z)
要使其与 一起使用optim
,请创建一个包装函数,将 x 和 y 放入单个向量中,使其在功能上与您的原始函数等效:
result <- optim(c(0, 0), function(x) fb(x[1], x[2]))$par
result
#> [1] -0.4736532 0.3684892
为了证明这是正确的结果,我们将在表面的 2D 表示上绘制最佳点。
library(ggplot2)
ggplot(cbind(expand.grid(x = x, y = y), z = c(z)), aes(x, y, fill = z)) +
geom_raster() +
scale_fill_viridis_c() +
geom_point(x = result[1], y = result[2], color = "white")
由reprex 包于 2022-06-15 创建(v2.0.1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句