用Java绘制高斯曲线

我正在使用Piccolo编写一个交互式小程序,我需要在其中包含一条高斯曲线(也称为正态分布图 )。

我想任何类型的Java实现都足够了,但我找不到任何。 理想情况下,我想传递一组值,并在面板,图像对象或可嵌入applet中的任何内容中绘制图表。

在亲自动手编写代码之前,是否有人知道要执行的代码?

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

不知道它是否有效,但Google抛出此代码来绘制高斯分布 。

这个项目的主页就在这里 。

如果Piccolo没有为你执行绘图,我可能会使用JFreeChart进行实际绘图,因为它得到了广泛支持并且非常有能力。 (我对Piccolo不熟悉)

编辑:看起来Apache Commons Math库有一个统计部分。 具体来说,是关于常见发行版的整个包。 希望那里有一些数学人,因为我记不起基本的统计数据……这是我尝试使用他们的库。 我这里只有一个滑动窗口,并计算这些值之间的P. 什么是从中获取PDF的真正方法? 它们只有CDFfunction。

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值,您就可以从中获得一个非常简单的二维图形。

你看过Java下的Mathtools吗?

好吧,这个怎么样...你给它一个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; } 

如果在网络上找不到任意均值和标准偏差,那么应该很容易实现一个。