arrays - 带矩阵的R 外部

  显示原文与译文双语对照的内容
0 0

假设我想最小化一个函数:


x<-seq(-4.5,4.5,by=.2)
y<-seq(-4.5,4.5,by=.2)
f <- function(x1,x2){(x1^2 + x2)^2 }
z <- outer(x,y,f)

其中,z 是维度 46 x 46的矩阵:


> class(z)
[1]"matrix"
> dim(z)
[1] 46 46

因此,我用以下方法绘制了一个结果图:


persp(x,y,z,phi=-45,theta=45,col="yellow",shade=.65, ticktype="detailed")

如果我写上一个,它是有效的,但是因为我想使用optim最小化函数,如果我使用:


optim(c(-4,-4), f, df)$par

> Error in fn(par,.. .) : argument"x2" is missing, with no default

因此,我需要使用 array,以便在所有情况下使用 optim 。 所以如果我写了:


f <- function(x) (x[1]^2 + x[2])^2 
x <- seq(-4.5,4.5,by=.2)
y <- seq(-4.5,4.5,by=.2)
s<-data.frame(cbind(x,y))

我可以使用 optim:


optim(c(-4,-4), f, df)$par

但是外部给出了一个错误:

 
z <- outer(s,f)

 

as.vector(x, mode) 错误:无法将类型'关闭'强制为类型为'any的向量'

我不知道怎么解决它。

时间: 原作者:

0 0

我相信这里的目标是不需要写两种不同的方法,对吧?


f0 <- function(x1,x2) ( x1^2 + x2 )^2
f <- function(x) ( x[1]^2 + x[2] )^2 

同样,也许你只想使用 s<-data.frame(cbind(x,y)) ( 没有 xy ) 。

下面是我要考虑的事情:


outer(s[[1]],s[[2]],Vectorize(function(xi,yi) f(c(xi,yi))))

这样,你只需要编写一次函数,以遵循 optim ( 使用单个参数)的方式。


注意:如果希望网格的xy 有不同的点数,那么应该存储 s <- list(x,y) 。 代码将同样工作。

原作者:
...