1

gsl_histogram のどのビンに割り当てられた値が、2 つのビンの間の端に正確に収まりますか?
たとえば、x が正確に 0 で、ビンのエッジが -0.2、0、0.2、0.4 などで を呼び出すとgsl_histogram_increment( h, x)、正の範囲 (0, 0.2) または負の範囲 (-0.2, 0) の増分が得られますか?

編集:はい、私の範囲は均一です。

4

2 に答える 2

3

ビン分布が線形である場合(例のように)、これは実行されているコードです(gsl-1.15/histogram/find.cから取得):

  /* optimize for linear case */

#ifdef LINEAR_OPT
  {
    double u =  (x - range[0]) / (range[n] - range[0]);
    i_linear = (size_t) (u * n);
  }

  if (x >= range[i_linear] && x < range[i_linear + 1])
    {
      *i = i_linear;
      return 0;
    }
#endif

ビンの下端の >= とビンの上部の端の < に注意してください。したがって、0.0 値は 0.0 - 0.2 ビンにドロップする必要があります。

非線形ビン分布の場合、バイナリ検索が実行されます。つまり、次のようになります。

  /* perform binary search */

  upper = n ;
  lower = 0 ;

  while (upper - lower > 1)
    {
      mid = (upper + lower) / 2 ;

      if (x >= range[mid])
        {
          lower = mid ;
        }
      else
        {
          upper = mid ;
        }
    }

  *i = lower ;

>= の使用は、ビンの端にある値が 2 つの「上の」ビンに含まれることを意味することに注意してください (線形の場合と同じ)。

例を実行し、値が追加されるビンを観察して、再確認してください。

于 2013-03-06T12:32:28.803 に答える
1

gsl_histogram_increment binL <= x < Uに値を配置するかどうかを決定するための条件を使用しているようです。そのため、 になります。x(L, U)0(0, 0.2)

于 2013-03-06T12:33:14.850 に答える