0

我只是有一个简单的问题,即如何对数据点进行高斯分箱。假设在 X = 100 时,我检测到 5000 个电子,但我的 FWHM 为 4 点。在 matlab 中是否可以将 5000 个电子与以 X = 100 为中心的高斯分箱。就像 X = 99 和 X = 101 之间的 2500 个电子和 95 和 105 之间的 5000 个电子一样?

4

1 回答 1

1

听起来您在单个点 ( X=100, e=5000) 进行了一次测量,并且还知道 FWHM 的值 ( FWHM = 4)。

如果确实如此,您可以像这样计算标准偏差 sigma

sigma = FWHM/ 2/sqrt(2*log(2));

你可以像这样制作垃圾箱:

[N, binCtr] = hist(sigma*randn(e,1) + X, Nbins);

其中N是每个 bin 中的电子数量,binCtr是 bin 中心,Nbins是您要使用的 bin 数量。

如果电子数量变,您可能会耗尽内存。在这种情况下,最好以较小的批次做同样的事情,如下所示:

% 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 回答