首页 > 解决方案 > R找到一组点“下方”最近的凸曲线

问题描述

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

标签: rpolynomials

解决方案


您正在寻找的内容被称为Greatest Convex Minorant。为了找到它,我们可以使用包中的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)

给予

在此处输入图像描述

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

在此处输入图像描述


推荐阅读