A lot like lm_fit_step Definition at line 685 of file fitting_toolkit.py. 00685 : 00686 "take one svd-hessian step and adjust damping based on chi^2" 00687 n=self.pointcount 00688 if self.firstpass: #do an initial measurement of chi2 first time through 00689 self.svd_damping_recipe() 00690 self.funcvals=self.compute_funcvals() 00691 self.set_weights() 00692 self.compute_chi2() 00693 self.firstpass=0 #we've done all the first-pass stuff now 00694 00695 save_chi2=self.chi2 00696 save_params=self.funcparams 00697 save_vals=self.funcvals 00698 try: 00699 self.svd_hessian_compute_fit(self.svd_damping) 00700 except KeyboardInterrupt: 00701 raise 00702 except: 00703 self.chi2=2.0*save_chi2 #just consider a failure to be a bad step 00704 self.svd_damping_recipe(save_chi2, self.chi2) 00705 if save_chi2 < self.chi2: #ouch, bad step, back up 00706 if trace: 00707 print "rejected step: old chi2=%.3e, new chi2=%.3e, lambda=%.3e" % (save_chi2, self.chi2, self.svd_damping) 00708 print "params =", self.funcparams 00709 self.funcparams=save_params 00710 self.chi2=save_chi2 00711 self.funcvals=save_vals 00712 return 1 #flag rejected step 00713 else: 00714 if trace: 00715 print "accepted step: old chi2=%.3e, new chi2=%.3e, lambda=%.3e" % (save_chi2, self.chi2, self.svd_damping) 00716 print "params =", self.funcparams 00717 return 0 #flag accepted step 00718
|