Как найти локальный максимум в R из графика - PullRequest
1 голос
/ 25 марта 2019

У меня проблема с моим кодированием.Я должен

  1. Построить график этого уравнения [y = f (x)], где f (x) = (10 * ((x-1) ^ 2) ^(1/3)) / (x ^ 2 + 9) для 10001 значений x между (и включая) -5 и 5

  2. Среди значений 10001 x в a найдитедва локальных максимума 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)]

однако, я получаю координаты только одной из максимальной точки и не знаю, каккак я могу получить еще один максимальный балл.

1 Ответ

1 голос
/ 25 марта 2019

Вы можете использовать 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 отмечена как внутренний .Поэтому вам необходимо получить к нему доступ, используя :::.

. Вы можете дополнительно параметризовать вызов на find_peaks, используя аргументы span и strict.Подробнее см. ??find_peaks.

Вы также можете напрямую изобразить это, используя пакеты ggplot2 и ggpmisc:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...