dim(z) [1] 46 46 所以我制作了一张结果图: persp(x,y,z,phi=-45,theta=45,co-6ren">
gpt4 book ai didi

arrays - R-外带矩阵

转载 作者:行者123 更新时间:2023-12-05 06:44:36 25 4
gpt4 key购买 nike

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

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

所以我需要使用数组才能使用 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(c(-4,-4), f, df)$par

但是outer报错:

z <- outer(s,f)

Error in as.vector(x, mode) : cannot coerce type 'closure' to vector of type 'any'

我不知道怎么解决。

最佳答案

我相信这里的目标是不必用两种不同的方式编写函数,对吧?

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)反而。代码将以同样的方式工作。

关于arrays - R-外带矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28506624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com