データポイントのガウスビニングを行う方法について簡単な質問があります。X = 100 で 5000 個の電子を検出するとしますが、FWHM は 4 ポイントのようです。X = 100 を中心としたガウス分布で 5000 個の電子をビンに入れることは、matlab で可能ですか?
質問する
733 次
1 に答える
1
X=100
1 つのポイント ( 、 )で 1 つの測定e=5000
値があり、FWHM の値もわかっているようです ( FWHM = 4
)。
これが実際に当てはまる場合、次のように標準偏差を計算できます。 sigma
sigma = FWHM/ 2/sqrt(2*log(2));
次のようにビンを作成できます。
[N, binCtr] = hist(sigma*randn(e,1) + X, Nbins);
ここN
で、 は各ビンの電子の量、binCtr
はビンの中心、Nbins
は使用するビンの量です。
電子の数が大きくなると、メモリが不足する可能性があります。このような場合は、同じことをより小さなバッチで実行することをお勧めします。たとえば、次のようになります。
% Example data
FWHM = 4;
e = 100000;
X = 100;
Nbins = 100;
% your std. dev.
sigma = FWHM/ 2/sqrt(2*log(2));
% Find where to start with the bin edges. That is, find the point
% where the PDF indicates that at most 1 electron is expected to fall
f = @(x, mu, sigma) exp(-0.5*((x-mu)/sigma).^2)/sigma/sqrt(2*pi);
g = @(y) quadgk(@(x)f(x,X,sigma), -inf, y)*e - 1;
h = fzero(g, X-FWHM*3);
% Create initial bin edges
binEdges = [-inf linspace(h, 2*X-h, Nbins-2) +inf];
% Bin electrons in batches
c = e;
done = false;
step = 5e3;
Nout = zeros(Nbins,1);
while ~done
% electrons still to be binned
c = c - step;
% Last step
if c <= 0
step = c+step;
c = 0;
done = true;
end
% Bin the next batch
N = histc(sigma*randn(step,1) + X, binEdges);
Nout = Nout + N;
end
% Bin edges must now be re-defined
binEdges =[...
2*binEdges(2)-binEdges(3),...
binEdges(2:end-1),...
2*binEdges(end-1)-binEdges(end-2)];
于 2013-06-18T20:50:11.527 に答える