private double SolveByInterpolation(double x) { var prevX = _population.GetDataPrior(x); var prevPercentile = Compute(prevX); var nextX = _population.GetDataAfter(x); var nextPercentile = Compute(nextX); var y = LinearInterpolator.SolveForY(x, prevX, nextX, prevPercentile, nextPercentile); return(y); }
public double Calculate(double p) { var nSamples = _population.NumSamplesWithinP(p); if (nSamples == 0) { return(_population.Min); } var prevData = _population.GetDataOfSample(nSamples - 1); var nextData = _population.GetDataOfSample(nSamples); var prevProb = GetProbabilityThroughSamples(nSamples - 1); var nextProb = GetProbabilityThroughSamples(nSamples); var y = LinearInterpolator.SolveForY(p, prevProb, nextProb, prevData, nextData); return(y); }