2009-03-31 4 views
4

나는 대화식 애플릿을 Piccolo으로 코딩하고 있는데, 내부에 가우스 곡선 (일명 Normal distribution chart)을 포함해야합니다.Java에서 가우시안 곡선 그리기

Java 구현의 모든 종류가 충분하지만 상상할 수 없다고 생각합니다. 이상적으로는, 일련의 값을 전달하고 차트를 패널, 이미지 객체 또는 애플릿에 임베드 할 수있는 모든 것으로 그려야합니다.

내 손을 더럽 히기 전에 코드 작성자는 코드 조각을 잘 알고 있습니까?

Java에 쉽게 이식 가능한 다른 언어의 구현도 환영합니다.

+0

수학 또는 라이브러리에 문제가 있습니까? – pyon

+0

그냥 라이브러리 :) 나는이 코드를 직접 작성할 수는 있지만 휠을 다시 발명하고 시간을 잃고 싶지는 않습니다.) – Seb

답변

4

작동하는지 모르겠지만 Google은 this code to plot a Gaussian distribution을 던졌습니다.

이 프로젝트의 홈 페이지는 here입니다.

피콜로가 사용자를 위해 플로팅을 수행하지 않으면 실제로 플로팅을 지원하기 때문에을 사용하게됩니다. (나는 Piccolo에 익숙하지 않다.)

+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.

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