我有一些坐标,我想用optim()找到中心,具体来说,我需要找到Fréchet平均值。
假设我有下一个坐标(1,3),(0,2),(1,5),(-3,-9)。
我把它们写在data.frame的"p“里。
p<-data.frame(X=c(1,0,1,-3), Y=c(3,2,5,-9))
到目前为止我的代码是:
fn<-function(x)
{
for (i in 1:(nrow(p)-1))
{r<- (p[i,1]-p[i,2])^2 + (p[i+1,1]-p[i+1,2])^2}
}
optim (c(1,1) , fn)
我选择了1,1作为起点。
两点之间的距离是:(x1-y1)^2 + (x2-y2)^2
我的代码显然不起作用,我需要一些关于如何使optim()最小化我的点的距离函数的指导。
(我是R/编码方面的新手)
发布于 2019-03-12 13:24:21
以下是我解决这个问题的方法:
p <- data.frame(X=c(1,0,1,-3), Y=c(3,2,5,-9))
P <- t(as.matrix(p))
# plot(p)
fn <- function(m) sum((P-m)^2)
optim(c(5,5) , fn)
它正在使用P-m
中的回收规则。
下面是fn()
的一个变体
fn <- function(m) sum((c(p$X-m[1], p$Y-m[2]))^2)
发布于 2019-03-11 16:36:52
不确定你到底想要做什么,但这是:
fn <- function(x) {
x1 <- x[1]
y1 <- x[2]
for (i in 1:nrow(p)){
r<-(x1-y1)^2 + (p[i,1]-p[i,2])^2
return(r)
}
}
optim(c(1,1) , fn)
https://stackoverflow.com/questions/55102393
复制相似问题