| 
					
				 | 
			
			
				@@ -1,82 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// Ceres Solver - A fast non-linear least squares minimizer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// Copyright 2010, 2011, 2012 Google Inc. All rights reserved. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// http://code.google.com/p/ceres-solver/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// Redistribution and use in source and binary forms, with or without 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// modification, are permitted provided that the following conditions are met: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// * Redistributions of source code must retain the above copyright notice, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   this list of conditions and the following disclaimer. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// * Redistributions in binary form must reproduce the above copyright notice, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   this list of conditions and the following disclaimer in the documentation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   and/or other materials provided with the distribution. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// * Neither the name of Google Inc. nor the names of its contributors may be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   used to endorse or promote products derived from this software without 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//   specific prior written permission. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// POSSIBILITY OF SUCH DAMAGE. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// Author: keir@google.com (Keir Mierle) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "ceres/levenberg_marquardt.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "gtest/gtest.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-namespace ceres2 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-namespace internal { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class PowellEvaluator : public Evaluator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  PowellEvaluator(const Program& program); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual ~PowellEvaluator() {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // Implementation of Evaluator interface. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual SparseMatrix* CreateJacobian() const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DenseSparseMatrix* dense_jacobian = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        new DenseSparseMatrix(NumResiduals(), NumEffectiveParameters()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    dense_jacobian->SetZero(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return dense_jacobian; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual bool Evaluate(const double* state, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        double* cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        double* residuals, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        SparseMatrix* jacobian) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // f1 = x1 + 10 * x2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    double r0 = x1[0] + T(10.0) * x2[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // f2 = sqrt(5) (x3 - x4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    double r1 = T(sqrt(5.0)) * (x3[0] - x4[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // f3 = (x2 - 2 x3)^2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    double r2 = (x2[0] - T(2.0) * x4[0]) * (x2[0] - T(2.0) * x4[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // f4 = sqrt(10) (x1 - x4)^2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    double r3 = T(sqrt(10.0)) * (x1[0] - x4[0]) * (x1[0] - x4[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (residuals != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      residuals[0] = r0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (jacobian ==  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    AlignedMatrixRef jacobian  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual bool Plus(const double* state, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    const double* delta, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    double* state_plus_delta) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual int NumEffectiveParameters() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual int NumParameters() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  virtual int NumResiduals() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}  // namespace internal 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}  // namespace ceres2 
			 |