50 lines
2.1 KiB
Matlab
50 lines
2.1 KiB
Matlab
function [LoadingRate, StandardError, ConfidenceInterval] = jackknifeErrorEstimation(this, ovenObj, NumberOfLoadedAtoms)
|
|
n = this.NumberOfAtoms;
|
|
Autocorrelation = zeros(1, n);
|
|
|
|
for i = 1:n-1
|
|
FirstTerm = 0;
|
|
SecondTerm = 0;
|
|
for j = 1:n-i
|
|
FirstTerm = FirstTerm + NumberOfLoadedAtoms(j) / j;
|
|
SecondTerm = SecondTerm + (NumberOfLoadedAtoms(i+j)) / (i+j);
|
|
Autocorrelation(i) = Autocorrelation(i) + ((NumberOfLoadedAtoms(j) / j) .*(NumberOfLoadedAtoms(i+j) / (i+j)));
|
|
end
|
|
Autocorrelation(i) = (1/(n-i)) * (Autocorrelation(i) - ((1/(n-i)) * FirstTerm * SecondTerm));
|
|
end
|
|
|
|
if Autocorrelation(1)~=0
|
|
|
|
Autocorrelation = Autocorrelation./Autocorrelation(1);
|
|
|
|
x = linspace(1,n,n);
|
|
|
|
[FitParams,~] = fit(x',Autocorrelation',"exp(-x/tau)", 'Startpoint', 100);
|
|
CorrelationFactor = FitParams.tau;
|
|
|
|
SampleLength = 2*CorrelationFactor+1;
|
|
NumberOfJackknifeSamples = floor(n/SampleLength);
|
|
CaptureRatioInEachSample = zeros(1,NumberOfJackknifeSamples);
|
|
SampleNumberLimit = min(NumberOfJackknifeSamples-1,5);
|
|
for i=1:NumberOfJackknifeSamples-SampleNumberLimit
|
|
CaptureRatioInEachSample(i) = NumberOfLoadedAtoms(n-ceil((i-1)*SampleLength))/(n-ceil((i-1)*SampleLength));
|
|
end
|
|
|
|
MeanCaptureRatio = sum(CaptureRatioInEachSample) / (NumberOfJackknifeSamples-SampleNumberLimit);
|
|
|
|
LoadingRate = MeanCaptureRatio * ovenObj.ReducedFlux;
|
|
|
|
Variance=0;
|
|
for i=1:NumberOfJackknifeSamples-SampleNumberLimit
|
|
Variance=Variance+(CaptureRatioInEachSample(i) - MeanCaptureRatio)^2;
|
|
end
|
|
StandardError = sqrt(Variance/(NumberOfJackknifeSamples-SampleNumberLimit));
|
|
|
|
ConfidenceInterval = LoadingRate + 1.96*StandardError; % 95% Confidence Intervals
|
|
|
|
else
|
|
LoadingRate = nan;
|
|
StandardError = nan;
|
|
ConfidenceInterval = [nan nan];
|
|
end
|
|
end |