R在一组点“下方”找到最近的凸曲线

时间:2019-01-10 11:11:20

标签: r polynomials

我有一组点,我想找到最接近该点“下”的凸曲线。 如下面的示例,其中每个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)

1 个答案:

答案 0 :(得分:4)

您要寻找的被称为最大凸面未成年人。要找到它,我们可以使用gcmlcm包中的fdrtool函数。

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

w2 <- tapply(w, v, min)

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

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

我们可能会用它绘制

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

给予

enter image description here

它在更复杂的情况下也可以完美地工作:

enter image description here