假设您有两条线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)},如下所示:>
这些线的交点在(1.5,2.5)。 L2是之前的最大值,L1是之后的最大值。此最大行在下面以红色显示。
如您所见,仅在每个点取最大值并加入它们是不够的,因此它需要将这些行视为某种形式的函数,然后取其最大值。 / p>
此外,如前所述,由于需要将数千个x值推广到更大的数据。
如果愿意,可以进一步测试代码,以便为一些x值随机生成y值,从图中可以清楚地看到它是否正确运行。
谢谢!
答案 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)
很显然,这扩展到了更复杂的L1
和L2
,因为approxfun
只是分段线性近似。另外,您可以添加L3
,L4
,依此类推。