2013-06-28 2 views
0

일련의 값에 대한 누적 분포 함수를 계산하려고합니다.GSL 막대 그래프 문제

gsl을 사용하여 히스토그램을 계산했으며 여기에서 CDF를 계산하려고 시도했지만 값이 한 위치만큼 이동 한 것처럼 보입니다.

gHist = gsl_histogram_alloc((maxRange - minRange)/5); 
gsl_histogram_set_ranges_uniform(gHist, minRange, maxRange); 

for (int j = 0; j < ValidDataCount; j++) 
gsl_histogram_increment (gHist, ValAdd[j]); 

gsl_histogram_pdf * p = gsl_histogram_pdf_alloc(gsl_histogram_bins(gHist)); 
gsl_histogram_pdf_init (p, gHist); 

for (int j = 0; j < gsl_histogram_bins(gHist) + 1 ; j++) 
printf ("%f ", p->sum[j]); 

히스토그램은 다음과 같이이다 : 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 .... 계속

내가 사용하고있는 코드입니다 이렇게. 이 20의 값

총이며 그리고 CDF는 : 0.00 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.1 0.1 ...

왜 제의 0가 위치? 0.05로 시작하면 안됩니까?

감사합니다.

+0

대답은 아주 늦게 온 것을 볼 수 있습니다 정의하기 때문에 하나 개의 요소의 이러한 추가 할당이 발생합니다 여전히 희망 유능한. –

답변

0

GSL alloc sum은 크기 n + 1의 배열이됩니다. 여기서 n은 bin 수입니다. 그러나, n 엔트리 만 pdf를 계산하는 데 필요합니다. GSL은 합이 [0] = GSL 소스 coode "pdf.c"에서

0 당신이

gsl_histogram_pdf *gsl_histogram_pdf_alloc (const size_t n) 
{ 
    (...) 
    p->sum = (double *) malloc ((n + 1) * sizeof (double)); 
} 


int gsl_histogram_pdf_init (gsl_histogram_pdf * p, const gsl_histogram * h) 
{ 
    (...) 
    p->sum[0] = 0; 
    for (i = 0; i < n; i++) 
    { 
    sum += (h->bin[i]/mean)/n; 
    p->sum[i + 1] = sum; 
    } 
}