Take an L-M fit step, and adjust the L-M parameter based on the behavior of chi^2.
Definition at line 638 of file fitting_toolkit.py. 00638 : 00639 "take one Levenberg-Marquardt step and adjust lambda based on chi^2" 00640 n=self.pointcount 00641 if self.firstpass: #do an initial measurement of chi2 first time through 00642 self.lm_lambda_recipe() 00643 self.funcvals=self.compute_funcvals() 00644 self.set_weights() 00645 self.compute_chi2() 00646 self.firstpass=0 #we've done all the first-pass stuff now 00647 00648 save_chi2=self.chi2 00649 save_params=self.funcparams 00650 save_vals=self.funcvals 00651 self.hessian_compute_fit(self.lm_lambda) 00652 self.lm_lambda_recipe(save_chi2, self.chi2) 00653 if save_chi2 < self.chi2: #ouch, bad step, back up 00654 if trace: 00655 print "rejected step: old chi2=%.3e, new chi2=%.3e, lambda=%.3e" % (save_chi2, self.chi2, self.lm_lambda) 00656 print "params =", self.funcparams 00657 self.funcparams=save_params 00658 self.funcvals=save_vals 00659 self.chi2=save_chi2 00660 return 1 #flag rejected step 00661 else: 00662 if trace: 00663 print "accepted step: old chi2=%.3e, new chi2=%.3e, lambda=%.3e" % (save_chi2, self.chi2, self.lm_lambda) 00664 print "params =", self.funcparams 00665 return 0 #flag accepted step 00666
|