Есть ли в Apache общая математическая функция для оценки функции Гаусса?
В Apache Commons Math есть класс Mean. Я хочу избегать создания объекта каждый раз, когда мне нужно вычислить среднее значение. После дальнейшего изучения я нашел класс StatUtils, который имеет статическую функцию, которая вычисляет среднее значение типа double[]. Теперь я хочу оценить функцию Гаусса. Я нашел класс Гаусса. Но я все же предпочел бы не создавать экземпляр объекта каждый раз, когда я хочу оценить функцию. Есть ли класс, похожий на StatUtils со статическими функциями для оценки функции Гаусса.
Я рассмотрел создание экземпляра глобального объекта типа Mean, чтобы получить доступ к функции mean без необходимости создания экземпляров нескольких объектов Mean, но когда я нашел StatUtil, я предпочел такой подход. Для гауссовой задачи даже глобальный объект неприемлем, так как для конструктора требуется среднее значение и параметр сигма. Поэтому мне все равно придется создавать новый объект для каждого дистрибутива.
Я ищу что-то вроде:
двойной у = гауссовский (х, среднее, сигма);
подвести итоги.
- Есть ли статическая функция для оценки функции Гаусса.
- Есть ли проблема разработки программного обеспечения, которая ведет дизайн библиотеки Apache Math, который мне не хватает? Что-то не так с подходом StatUtils или Java.Math, использующим статические функции.
2 ответа
Пока вам не нужна инфраструктура с производными и параметриками, которая связана с исходным классом, должна быть возможность извлечь соответствующие вычисления (которые не содержат никакого реального "состояния", но зависят только от трех параметров, которые Вы упомянули) и поместите его в один статический метод.
Исходя из исходного гауссовского класса, он должен выглядеть примерно так:
// Based on the Gaussian class from Apache Commons Math
public static double gaussian(double x, double mean, double sigma)
{
double norm = 1 / (sigma * Math.sqrt(2 * Math.PI));
double is = 1 / sigma;
double i2s2 = 0.5 * is * is;
double xMinusMean = x - mean;
return norm * Math.exp(-xMinusMean * xMinusMean * i2s2);
}
Вам нужна функция плотности вероятности PDF или накопительная функция плотности CDF. PDF предоставлен ответом @Marco13. Для большинства статистических приложений наиболее интересен CDF, который находит вероятность того, что x
Что вы можете сделать, так это иметь один экземпляр org.apache.commons.math3.distribution.NormalDistribution, который означает 0 и стандартное отклонение 1. Вы можете изменить масштаб значений, чтобы соответствовать
static NormalDistribution dist = new NormalDistribution();
static double density(double x, double mean, double sd) {
double scaledx = (x-mean)/sd;
return dist.density(scaledx);
}
static double cumulativeProbability(double x, double mean, double sd) {
double scaledx = (x-mean)/sd;
return dist.cumulativeProbability(scaledx);
}