如何从图中找到R中的局部最大值

问题描述 投票:1回答:1

我的编码问题。我应该

  1. 绘制该等式[y = f(x)]的图形,其中f(x)=(10 *((x-1)^ 2)^(1/3))/(x ^ 2 + 9)表示10001个值在(和包括)-5和5之间的x
  2. 在a中的10001个x值中,找到两个局部最大值f(x)。

我试过这样做:

# question1
x <- seq(-5,5,length=10001)
y <- (10*((x-1)^2)^(1/3))/(x^2 + 9)

plot(x,y) # This will produce a graph with two max point

# question2
x[which.max(y)]
y[which.max(y)]

但是,我只得到最大点之一的坐标,并且无法知道如何得到另一个最大点。

r function max local
1个回答
1
投票

你可以使用find_peaks包中的ggpmisc

library(ggpmisc)
x[ggpmisc:::find_peaks(df$y)]
y[ggpmisc:::find_peaks(df$y)]

输出是:

[1] -1.5  3.0
[1] 1.6373473 0.8818895

请注意,函数find_peaks被标记为internal。因此,您需要使用:::访问它。

您可以使用find_peaksspan参数进一步参数调用strict。有关详细信息,请参阅??find_peaks

您也可以使用ggplot2ggpmisc包直接绘制:

x <- seq(-5,5,length=10001)
y <- (10*((x-1)^2)^(1/3))/(x^2 + 9)
df <- data.frame(x = x, y = y)
ggplot(data = df, aes(x = x, y = y)) + geom_line() + stat_peaks(col = "red")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.