public void ShouldDecreaseSigma() { var slopes = new double[] { Photometry2.SigmaSlopeFromDerivative(381.640843293, 1, 6, 3.0, 1500), Photometry2.SigmaSlopeFromDerivative(381.640843293, 1, 6, 3.022, 1500), Photometry2.SigmaSlopeFromDerivative(381.640843293, 1, 6, 3.2, 1500) }; var residuals = new double[] { Photometry2.GetResidualFromEstimate(381.640843293, 1, 6, 3.022, 1500) }; }
public static double[] GradientTowardsMinimalErrorForGaussian(double peak, double sigma, ushort[] samples, double center, GaussianFitOptions2 options) { var vec = new double[2]; var used = 0; for (var x = 0; x < samples.Length; x++) { var distance = (x - center); if (distance <= 5) { continue; } var distanceSquared = distance * distance; var sample = samples[x]; var sChange = Photometry2.SigmaSlopeFromDerivative((double)sample, (double)x, center, sigma, peak); var pChange = Photometry2.PeakSlopeFromDerivative((double)sample, (double)x, center, sigma, peak); if (double.IsPositiveInfinity(sChange) || double.IsNegativeInfinity(sChange)) { throw new ArgumentException(); } if (double.IsPositiveInfinity(pChange) || double.IsNegativeInfinity(pChange)) { throw new ArgumentException(); } vec[0] += (1 * sChange); vec[1] += (1 * pChange); used++; } vec[0] /= used; vec[1] /= used; return(vec); }