Take one inverse-Hessian or Levenberg-Marquardt step in a fit.
Definition at line 514 of file fitting_toolkit.py. 00514 : 00515 "take one Hessian fitting step if lm_lambda undefined, otherwise make Levenberg-Marquardt adjustment" 00516 00517 n=self.pointcount 00518 fxarray=self.derivs() 00519 00520 self.set_weights() 00521 fxwarray=self.weights_multiply(Numeric.transpose(fxarray)) 00522 self.fitmat=dot(fxwarray, fxarray) 00523 00524 if lm_lambda is not None: #make Levenberg-Marquardt correction to inverse-covariance matrix 00525 for i in range(self.param_count): 00526 self.fitmat[i,i]*=(1.0+lm_lambda) 00527 00528 for i in range(self.param_count): #handle frozen parameters 00529 if self.frozen[i]: 00530 self.fitmat[i,:]=0.0 00531 self.fitmat[:,i]=0.0 00532 self.fitmat[i,i]=1.0 00533 00534 if(self.firstpass): 00535 self.funcvals=self.compute_funcvals() 00536 self.firstpass=0 00537 00538 self.fitvector=solve_linear_equations(self.fitmat, dot(fxwarray, self.yarray[:n]-self.funcvals) ) 00539 self.funcparams=self.funcparams+self.fitvector*(1-self.frozen) 00540 self.funcvals=self.compute_funcvals() 00541 self.compute_chi2() 00542
|