代码之家  ›  专栏  ›  技术社区  ›  Seb

用Java绘制高斯曲线

  •  4
  • Seb  · 技术社区  · 15 年前

    我正在编写一个交互式小程序 Piccolo 我需要包括一条高斯曲线(aka) Normal distribution chart )里面。

    在我自己动手编码之前,有人知道有一段代码可以完成吗?

    欢迎使用其他语言实现,只要它们易于移植到Java。

    2 回复  |  直到 15 年前
        1
  •  5
  •   Brian Agnew    15 年前

    不知道它是否有效,但谷歌放弃了 this code to plot a Gaussian distribution .

    此项目的主页是 here .

    如果Piccolo不为您执行绘图,我可能会使用 JFreeChart 对于实际绘图,因为它得到了广泛支持,而且功能非常强大。(我不熟悉短笛)

        2
  •  2
  •   John Ellinwood    15 年前

    编辑:看起来像 Apache Commons Math library 有一个统计部分。具体地说,是一个通用的软件包 Distributions . 希望有一些数学方面的人,因为我记不起基本的统计数据。。。这是我尝试使用他们的图书馆。我这里有一个滑动窗口,计算这些值之间的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;
        }
    }
    

    我假设你想要这个图的概率密度函数。这个 equations are on wikipedia

    你看过吗 Mathtools under Java ?

    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;
    }
    

    如果在网上找不到,那么采用任意均值和标准差的方法应该很容易实现。

    推荐文章