R找到最近的凸曲线"below"一组点

R Find the nearest convex curve "below" a set of points

我有一组点,我想找到最接近"below"这组点的凸曲线。 如下例所示,每个 v,w 点都在 qe 曲线上方。 感谢您的帮助。

v<-c(-1,0,0,.5,1.2,1.7,-1,1.7);w<-c(3,0,2,4,3,3.4,1,2.89)
qe<-seq(min(v),max(v),length.out=10)**2
plot(v,w)
lines(seq(min(v),max(v),length.out=10),qe)

您正在寻找的是最伟大的小凸面。要找到它,我们可以使用 fdrtool 包中的 gcmlcm 函数。

首先,我们需要确保每个 x 只有一个唯一值。因此,我们将 w 替换为

w2 <- tapply(w, v, min)

v的每个值分配w的最小值。 (在这种情况下,v = 0 处有两个值。)仅此而已,我们的结果是

result <- gcmlcm(x = as.numeric(names(w2)), y = w2, "gcm")

我们可以用它绘制

lines(result$x.knots, result$y.knots)

给予

而且它在更复杂的情况下也能完美运行: