using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearRegression;
double[] xData = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
double[] yData = { 2.5, 3.1, 4.2, 5.8, 7.4, 8.0, 7.5, 6.1, 4.8, 3.3 };
Func<double, double, double, double, double> gaussian = (a, b, c, x) =>
a * Math.Exp(-Math.Pow(x - b, 2) / (2 * c * c));
double[] initialGuess = { 8.0, 5.0, 2.0 };
var result = Fit.Curve(xData, yData, gaussian, initialGuess[0], initialGuess[1], initialGuess[2], maxIterations: 1_000_000 );
Console.WriteLine($"Fitted parameters: a = {result.Item1}, b = {result.Item2}, c = {result.Item3}");