Edit: похоже, что библиотека Apache Commons Math имеет раздел статистики. В частности, целый пакет на общих Распределениях . Надеюсь, есть некоторые математики, потому что я не могу вспомнить основную статистику ... вот моя попытка использовать их библиотеку. У меня просто скользящее окно и я вычисляю P между этими значениями. Каков реальный способ получить PDF от этого? Они имеют только функцию CDF.
public void testNormalDist() throws MathException {
DistributionFactory f = DistributionFactory.newInstance();
NormalDistribution n = f.createNormalDistribution(0.0d, 1.0d);
double lastx = Double.NEGATIVE_INFINITY;
double nextx = Double.NEGATIVE_INFINITY;
for (int i=-100; i < 100; i++) {
nextx = i / 100d;
System.out.println(n.cumulativeProbability(lastx, nextx));
lastx = nextx;
}
}
Полагаю, вам нужна функция плотности вероятности для графика. уравнения приведены в википедии , так как я не знаю, как включить здесь математическую разметку. Просто используйте p (x) в качестве значения Y и X в качестве значения X, и из этого вы сможете получить довольно простой двухмерный график.
Вы смотрели на Mathtools под Java ?
Хорошо, как насчет этого ... вы даете ему массив точек X (нормализованный, конечно, вы можете преобразовать ваши пиксели X в них, разделив позицию каждого пикселя на ширину вашего изображения), и он вернет высоты кривой распределения (опять же, умножьте на коэффициент нормализации). Это для базового случая, когда среднее значение равно 0, а стандартное отклонение равно 1.
public double[] normalDistBasic(double[] xarray, double mu) {
double[] yarray = new double[xarray.length];
double rad2pi = 2.50662827d;
for (int off = 0; off < yarray.length; off++) {
double x = xarray[off];
double ss = -1d * x * x / 2d;
yarray[off] = (-1f / rad2pi) * Math.exp(ss);
}
return yarray;
}
Должно быть довольно легко реализовать тот, который принимает произвольное среднее значение и стандартное отклонение, если его нельзя найти в сети.