R中两行的任意点的最大值

时间:2018-10-30 09:55:51

标签: r

假设您有两条线L1和L2,对于每个x值(例如x1和x2),它们在L1={(x1,L1_y1), (x2,L1_y2)}L2={(x1,L2_y1), (x2,L2_y2)}处都有已知点。通过连接这些点,它们在x3处可能有交集,而其中x1

现在假设您想知道这两条线的任何x值(不仅限于x1,x2等,而且沿轴的任何位置)的最大值。显然,仅计算几行和几个不同的x值通常是很琐碎的,但是在我的情况下,我有数万个x值和几行可以对其进行检查,因此无法手动完成。

在R中,是否有一些代码可以计算任何给定点x3的最大值?

在此可以看到一个示例,其中L1 = {(1,1),(2,4)}和L2 = {(1,4),(2,1)},如下所示:

Example plot of two lines

这些线的交点在(1.5,2.5)。 L2是之前的最大值,L1是之后的最大值。此最大行在下面以红色显示。
What I am after

如您所见,仅在每个点取最大值并加入它们是不够的,因此它需要将这些行视为某种形式的函数,然后取其最大值。 / p>

此外,如前所述,由于需要将数千个x值推广到更大的数据。

如果愿意,可以进一步测试代码,以便为一些x值随机生成y值,从图中可以清楚地看到它是否正确运行。

谢谢!

1 个答案:

答案 0 :(得分:3)

在示例中定义构成线条的点

L1 <- list(x = c(1, 2), y = c(1, 4))
L2 <- list(x = c(1, 2), y = c(4, 1))

定义一个函数,该函数采用对应于直线的两个函数的逐点最大值

myMax <- function(x)
  pmax(approxfun(L1$x, L1$y)(x), approxfun(L2$x, L2$y)(x))

这给

plot(L1$x, L1$y, type = 'l')
lines(L2$x, L2$y, col = 'red')
curve(myMax(x), from = 1, to = 2, col = 'blue', add = TRUE)

enter image description here

很显然,这扩展到了更复杂的L1L2,因为approxfun只是分段线性近似。另外,您可以添加L3L4,依此类推。