@Zulkund

Как найти точки максимального изменения графика?

Даны два массива со значениями функции:
int [] x = {100,100,80,...,30,30};
int [] y = {20,19,18,.....,15,14};

Длина массива N порядка 3000.
Как можно найти точки максимального изменения значения функции, отмеченные на картинке?
6448c0800871a718414295.png
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Zulkund, Есть прекрасная бибилиотека Apache Math, там есть функции stats, а еще там есть percentiles
https://commons.apache.org/proper/commons-math/use...
// Get a DescriptiveStatistics instance
DescriptiveStatistics stats = new DescriptiveStatistics();

// Add the data from the array
for( int i = 0; i < inputArray.length; i++) {
        stats.addValue(inputArray[i]);
}

// Compute some statistics
double mean = stats.getMean();
double std = stats.getStandardDeviation();
double median = stats.getPercentile(50);

На всякий случай про математику - https://www.youtube.com/watch?v=SaF2G5WMwtg

Ищете среднее значение (mean) и медиану (median), считаете перцентиль для одного и второго, получаете свои выбросы в минимуме и в среднем.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Найдите длину отрезков между точками и отсортируйте массив этих длин по убыванию.
Если нужно, то получите разницу между длинами (это значения производной первого порядка для длин), записав эти значения в новый массив.
На основании первого и второго массива составьте целевую функцию, задав критерии аномально длинных отрезков (параметры целевой функции).
Ответ написан
@Dementor
программист, архитектор, аналитик
1) "int {}" - это не Java, а C++
2) А в чем сложность? N наборов точек - это (N-1) отрезок. Рассчитывай их длину и ищи максимальный.

Длина отрезка равна sqrt( pow(x[i] - x[i-1]) + pow(y[i] - y[i-1) ), где i - индекс от 1 до (N-1)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы