2016-03-22 6 views
0

Ich versuche, das Beispiel von EJML Wiki zu verwenden, wo wir Levenberg- Marquardt Optimierung source code hereLM-Algorithmus EJML

verwende ich vergleiche es mit diesem einen .Net version, in dem wir die Möglichkeit haben, die Funktionsmodellparameter zu geben.

Zum Beispiel: a*x^2+b*x+c und wir können alle Parameter für das Modell als Eingaben angeben.

Allerdings kann ich für den EJML-LM-Code nicht sehen, wo ich diese Modellparameter angeben kann.

ich unten ein, wie ich die LM EJML Klasse verwenden:

public class Main { 
    public static void main(String[] args) { 
     LevenbergMarquardt lm = new LevenbergMarquardt(new LevenbergMarquardt.Function() { 

      @Override 
      public void compute(DenseMatrix64F param, DenseMatrix64F x, DenseMatrix64F y) { 
       // TODO Auto-generated method stub 
       System.out.println("param:"); 
       param.print(); 
       System.out.println("X:"); 
       x.print(); 
       //y=a*x^2+b*x+c 
       for (int i = 0; i < x.numRows; i++) { 
        double xx = x.get(i, 0); 
        y.set(i, 0, param.get(0, 0) * xx * xx + 
         param.get(1, 0) * xx + param.get(2, 0)); 
       } 
       System.out.println("Y:"); 
       y.print(); 
      } 
     }); 
     //Seed inital parameters 
     lm.optimize(new DenseMatrix64F(new double[][]{{1}, {1}, {1}}), 
       new DenseMatrix64F(new double[][]{{0.1975}, {0.5084}, {0.7353}, {0.9706}, 
         {1.1891}}), new DenseMatrix64F(new double[][]{{-0.0126}, {0.2311}, 
         {0.4412}, {1.0210}, {1.1891}}));  
    } 
} 

So Wie kann ich die Modellparameter geben?

Antwort

0

Sie könnten zur Kasse gehen DDogleg. Es enthält einen robusteren LM-Solver und verwendet EJML unter der Haube. Der LM-Solver, den Sie auf der EJML-Website gefunden haben, dient als Beispiel für die Verwendung von EJML und überspringt einige Details.