Главная — Семестр 1 |
Обновлено: 06 октября 2015 |
Необходимо найти локальные максимумы и минимумы при заданном размере окрестности. Подумать: как можно улучшить определение размера окрестности с учётом разброса значений ряда
Примечание: далее часть кода написана с учётом дат, можно всё сделать без этого.
x <- 1:10
y <- c(1,2,4,2,0,2,3,2,1,2)
plot(x, y, type = "l")
Максимальными значениями являются c(4, 3)
, минимальными c(1,0,1)
Данные:
x <- read.table(file = "http://leonovmx.github.io/info/s1/fx.csv", header = T, sep = ";")
x <- read.csv("./fx.csv", sep=";")
x[,1] <- as.Date(x[,1], format = "%d.%m.%y") # Преобразует даты в понятный формат
plot(x, type = "l") # Рисует график
d <- 100 # Размер окрестности
Алгоритм находит точки, которые являются максимумами по определнию.
## [1] "Точки максимума и значения:"
## точки значения даты
## 1 576 31.8846 2003-01-09
## 2 975 29.2760 2004-08-13
## 3 1302 28.9978 2005-12-06
## 4 2097 36.4267 2009-02-19
## 5 2419 31.7798 2010-06-08
## 6 2544 31.4555 2010-12-02
## 7 2752 32.6799 2011-10-05
## 8 2915 34.0395 2012-06-05
## 9 3357 36.6505 2014-03-18
## 10 3573 69.6640 2015-02-03
## [1] "Точки минимума и значения:"
## точки значения даты
## 1 840 28.4850 2004-01-29
## 2 1120 27.4611 2005-03-18
## 3 1948 23.1255 2008-07-16
## 4 2282 28.6701 2009-11-13
## 5 2646 27.2625 2011-05-06
## 6 2868 28.9468 2012-03-28
## 7 3082 29.9251 2013-02-05
## 8 3426 33.6306 2014-06-28
Чтобы было наглядно:
plot(x = dates, y = x, type = "l")
abline(v = dates[vmx], col = "green") # Рисует максимумы
abline(v = dates[vmn], col = "red", lty = 2) # Рисует минимумы