Вопрос

Я кодирую интерактивный апплет с Piccolo и мне нужно включить гауссову кривую (она же Диаграмма нормального распределения) внутри него.

Я предполагаю, что любой реализации Java было бы достаточно, но я не могу найти ни одной.В идеале я хотел бы передать набор значений и отрисовать диаграмму в виде панели, объекта изображения или чего-либо еще, что может быть встроено в апплет.

Прежде чем я запачкаю руки, кодируя это сам, знает ли кто-нибудь рабочий фрагмент кода для этого?

Реализации на других языках приветствуются, при условии, что они легко переносимы на Java.

Это было полезно?

Решение

Не знаю, работает ли это, но Google вырвало этот код для построения гауссовского распределения.

Домашней страницей этого проекта является здесь.

Если Piccolo не выполняет построение графика для вас, я бы, возможно, использовал JFreeChart (Бесплатная карта) для фактического построения графика, поскольку он широко поддерживается и очень эффективен.(Я не знаком с Piccolo)

Другие советы

Редактировать:Это выглядит как Математическая библиотека Apache Commons Math library имеет раздел статистики.В частности, целый пакет по общим Распределения.Надеюсь, там есть какие-нибудь математики, потому что я не могу вспомнить элементарную статистику...вот моя попытка использовать их библиотеку.У меня просто есть скользящее окно здесь и вычисляю 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;
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top