/** LMdemo Levenberg Marquardt demonstrator * * This one file contains four classes: * LMdemo contains just main() * RosenHost defines Rosenbrock demo problem. * LMhost interfaces methods needed by LM. * LM is the Levenberg-Marquardt routine. * * M.Lampton UCB SSL (c) 1996; Java edition 2007 */ public class LMdemo { public static void main(String args[]) { RosenHost myHost = new RosenHost(); } } //---------------------RosenHost----------------------- class RosenHost implements LMhost // Demonstrates Rosenbrock's parabolic valley // Triggers LM by instantiating an object of class LM // Supplies five callback methods mandated by interface LMhost { //--------constants--------------- protected final double SIGMA = 1e-6; protected final double DELTAP = 1e-6; protected final double BIGVAL = 9.876543E+210; protected int NPTS, NPARMS; //--------fields------------------ private double resid[]; private double jac[][]; private double parms[]; public RosenHost() { //-----set up constants---- NPTS = 2; NPARMS = 2; //----set up working arrays--------- resid = new double[NPTS]; jac = new double[NPTS][NPARMS]; parms = new double[NPARMS]; parms[0] = -1.2; // Rosenbrock starting point parms[1] = +1.0; // Rosenbrock starting point for (int i=0; i-LMTOL) || (lambda>LAMBDAMAX); return done; } private double gaussj( double[][] a, int N ) // Inverts the double array a[N][N] by Gauss-Jordan method // M.Lampton UCB SSL (c)2003, 2005 { double det = 1.0, big, save; int i,j,k,L; int[] ik = new int[100]; int[] jk = new int[100]; for (k=0; kk) for (j=0; jk) for (i=0; ik) for (i=0; ik) for (j=0; j