public static void FitNonlin(double[] x, double[] y, double[] sig, double[] a, out double chisq, MrqminFunc func) { int ndata = x.Length; if (sig == null) { sig = new double[ndata]; for (int i = 0; i < sig.Length; i++) { sig[i] = 1; } } int ma = a.Length; double[,] covar = new double[ma, ma]; double[,] alpha = new double[ma, ma]; int[] ia = new int[ma]; for (int i = 0; i < ma; i++) { ia[i] = 1; } double alamda = -1; double ochisq = 0; double[,] oneda = null; int mfit = 0; double[] atry = null; double[] beta = null; double[] da = null; NumericalRecipes.Mrqmin(x, y, sig, ndata, a, ia, ma, covar, alpha, out chisq, func, ref alamda, ref ochisq, ref oneda, ref mfit, ref atry, ref beta, ref da); int count1 = 0; while (alamda > 1e-20 && alamda < 1e20 && count1 < 100) { NumericalRecipes.Mrqmin(x, y, sig, ndata, a, ia, ma, covar, alpha, out chisq, func, ref alamda, ref ochisq, ref oneda, ref mfit, ref atry, ref beta, ref da); count1++; } alamda = 0; NumericalRecipes.Mrqmin(x, y, sig, ndata, a, ia, ma, covar, alpha, out chisq, func, ref alamda, ref ochisq, ref oneda, ref mfit, ref atry, ref beta, ref da); }