private float amotsa(float[,] p, float[] y, float[] psum, int ndim, float[] pb, ref float yb, ChiSqr f, int ihi, ref float yhi, float temptr, float fac) { }
private void amebsa(float[,] p, float[] y, int ndim, float[] pb, ref float yb, float ftol, ChiSqr f, ref int iter, float temptr) { }
private void startamo(bool[] ip, out float[,] p, out float[] y, out float[] pb, out float yb, out int ndim, out ChiSqr chisq) { int i, j, ilo; float[] pp; ip0 = ip; chisq = new ChiSqr(chisqr); ndim = 0; for (i = 0; i < ip.Length; i++) { if (ip[i]) { ndim++; } } p0 = new double[ip.Length]; p = new float[ndim + 1, ndim]; y = new float[ndim + 1]; ptry = new float[ndim]; for (i = 0, j = 0; i < ip.Length; i++) { if (ip[i]) { p[0, j++] = (float)f.p[i]; } } for (i = 1; i <= ndim; i++) { for (j = 0; j < ndim; j++) { if (j == i - 1) { p[i, j] = p[0, j] * 2; } else { p[i, j] = p[0, j]; } } } pp = new float[ndim]; yb = float.MaxValue; ilo = 0; for (i = 0; i <= ndim; i++) { for (j = 0; j < ndim; j++) { pp[j] = p[i, j]; } y[i] = chisq(pp); if (y[i] < yb) { ilo = i; yb = y[i]; } } pb = new float[ndim]; for (i = 0; i < ndim; i++) { pb[i] = p[ilo, i]; } }
private void startamo(bool[] ip, out float[,] p, out float[] y, out float[] pb, out float yb, out int ndim, out ChiSqr chisq) { int i, j, ilo; float[] pp; ip0 = ip; chisq = new ChiSqr(chisqr); ndim = 0; for (i = 0; i < ip.Length; i++) { if (ip[i]) ndim++; } p0 = new double[ip.Length]; p = new float[ndim+1, ndim]; y = new float[ndim+1]; ptry = new float[ndim]; for (i = 0, j = 0; i < ip.Length; i++) { if (ip[i]) p[0, j++] = (float)f.p[i]; } for (i = 1; i <= ndim; i++) { for (j = 0; j < ndim; j++) { if (j == i-1) p[i, j] = p[0, j]*2; else p[i, j] = p[0, j]; } } pp = new float[ndim]; yb = float.MaxValue; ilo = 0; for (i = 0; i <= ndim; i++) { for (j = 0; j < ndim; j++) pp[j] = p[i, j]; y[i] = chisq(pp); if (y[i] < yb) { ilo = i; yb = y[i]; } } pb = new float[ndim]; for (i = 0; i < ndim; i++) pb[i] = p[ilo, i]; }