2009-03-31 20 views
4

私はPiccoloのインタラクティブアプレットをコーディングしており、その内部にガウス曲線(別名Normal distribution chart)を含める必要があります。Javaでガウス曲線を描く

私はJavaの実装があれば十分だと思いますが、私は見つけられません。理想的には、一連の値を渡して、パネル、イメージオブジェクト、またはアプレットに埋め込むことができるものにチャートを描画させたいと思います。

私の手を汚くする前に、誰かがそれを行うためのコードを知っていますか?

Javaへの移植が容易であれば、他の言語の実装も歓迎されます。

+0

数学やライブラリに問題はありますか? – pyon

+0

ちょうどライブラリ:)私はこれをコードすることができますが、ホイールを再発明して時間を失いたくはありません; – Seb

答えて

4

うまくいきませんが、Googleはthis code to plot a Gaussian distributionを投げつけました。

このプロジェクトのホームページはhereです。

Piccoloがプロットを実行しない場合は、広くサポートされており、非常に優れているため、おそらくJFreeChartを実際のプロットに使用します。 (私はピッコロに慣れていません)

+0

これは有望そうです。 Googleでそれを見つけられませんでした。私は試してみて、それがうまくいけば、この答えを受け入れるよ:) – Seb

+0

最後に、私はガウスチャートを使わず、伝統的なバーチャートを使った。とにかく、作業用コードへのリンクを提供してくれたので、この答えは最高です(Johnもいくつかの素晴らしい例を示しましたが)。私はそれを受け入れています。 – Seb

2

編集: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、私はここに数学のマークアップを含める方法を知らないので、 Y値としてp(x)を使用し、X値としてXを使用すると、それからかなり簡単な2-dグラフを得ることができます。

あなたはMathtools under Javaを見ましたか?

これはどうでしょうか...あなたはX点の配列を与えます(正規化されていますが、Xピクセルを画像の幅で各ピクセルの位置に分割することができます)。分布カーブの高さを戻します(再び正規化係数を掛けます)。これは平均0と標準偏差は、1がネット上で見つけることができない場合は、任意の平均値と標準偏差を取る1を実装するのはかなり簡単なはず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; 
} 

である。基本的な場合であります

+0

ええ、私はそれらの方程式を見てきましたが、私はすでに働いているライブラリを見つけることができない場合は私が使用するものです。とにかくありがとう! – Seb

+0

いいね!もっと探すほど、私は自分自身をコーディングする必要があると思うので、これは本当に歓迎です。ありがとう! – Seb

関連する問題