public static double SignalToNoiseRatio(FunctionData first, FunctionData second) { var numerator = second.Points.Select(p => first.Function(first, p.X)) .Sum(); var denominator = second.Points .Select(p => Math.Pow(first.Function(first, p.X) - p.Y, 2)).Sum(); return(10 * Math.Abs(Math.Log10(Math.Abs(numerator / denominator)))); }
public static void GenerateSignal(FunctionData data) { data.Points.Clear(); var interval = data.Duration.Value / (data.Samples.Value - 1); for (var i = 0; i < data.Samples.Value; i++) { var x = i * interval; try { var y = data.Function(data, x); if (Math.Abs(y) < 10E-10) { y = 0d; } data.Points.Add(new Point(x, y)); } catch (DivideByZeroException) { // Everything is fine, we just don't add this point } } data.Points.Sort(); // No idea why I put it here, seems not to have any influence, but better don't remove. data.CalculateParameters(); data.PointsUpdate(); Histogram.GetHistogram(data); }
public static double MaximumDifference(FunctionData first, FunctionData second) { return(second.Points .Select(p => Math.Abs(p.Y - first.Function(second, p.X))).Max()); }
public static double MeanSquaredError(FunctionData first, FunctionData second) { return(second.Points .Select(p => Math.Pow(first.Function(first, p.X) - p.Y, 2)).Sum() / second.Points.Count); }