@@ -170,14 +170,14 @@ public NonlinearObjectiveModel(
170170 /// </summary>
171171 /// <param name="residualFunction">Function that directly calculates residuals from parameters</param>
172172 /// <param name="jacobian">Optional Jacobian of residual function</param>
173- /// <param name="accuracyOrder">Accuracy order for numerical differentiation (1-6)</param>
174173 /// <param name="observationCount">Number of observations for degree of freedom calculation. If not provided,
175174 /// will use the length of residual vector, which may not be appropriate for all statistical calculations.</param>
175+ /// <param name="accuracyOrder">Accuracy order for numerical differentiation (1-6)</param>
176176 public NonlinearObjectiveModel (
177177 Func < Vector < double > , Vector < double > > residualFunction ,
178178 Func < Vector < double > , Matrix < double > > jacobian = null ,
179- int accuracyOrder = 2 ,
180- int ? observationCount = null )
179+ int ? observationCount = null ,
180+ int accuracyOrder = 2 )
181181 {
182182 _residualFunction = residualFunction ?? throw new ArgumentNullException ( nameof ( residualFunction ) ) ;
183183 _residualJacobian = jacobian ;
@@ -191,7 +191,7 @@ public IObjectiveModel Fork()
191191 {
192192 if ( _useDirectResiduals )
193193 {
194- return new NonlinearObjectiveModel ( _residualFunction , _residualJacobian , _accuracyOrder , _observationCount )
194+ return new NonlinearObjectiveModel ( _residualFunction , _residualJacobian , _observationCount , _accuracyOrder )
195195 {
196196 _coefficients = _coefficients ,
197197 _hasFunctionValue = _hasFunctionValue ,
@@ -230,11 +230,21 @@ public IObjectiveModel CreateNew()
230230 {
231231 if ( _useDirectResiduals )
232232 {
233- return new NonlinearObjectiveModel ( _residualFunction , _residualJacobian , _accuracyOrder , _observationCount ) ;
233+ return new NonlinearObjectiveModel ( _residualFunction , _residualJacobian , _observationCount , _accuracyOrder )
234+ {
235+ IsFixed = IsFixed
236+ } ;
234237 }
235238 else
236239 {
237- return new NonlinearObjectiveModel ( _modelFunction , _modelDerivative , _accuracyOrder ) ;
240+ return new NonlinearObjectiveModel ( _modelFunction , _modelDerivative , _accuracyOrder )
241+ {
242+ ObservedX = ObservedX ,
243+ ObservedY = ObservedY ,
244+ Weights = Weights ,
245+ L = L ,
246+ IsFixed = IsFixed
247+ } ;
238248 }
239249 }
240250
@@ -457,6 +467,8 @@ void EvaluateFunction()
457467 /// </summary>
458468 void EvaluateJacobian ( )
459469 {
470+ var evaluations = 0 ;
471+
460472 if ( _coefficients == null )
461473 {
462474 throw new InvalidOperationException ( "Cannot evaluate Jacobian: current parameters is not set." ) ;
@@ -473,7 +485,7 @@ void EvaluateJacobian()
473485 else
474486 {
475487 // Calculate Jacobian numerically for residual function
476- _jacobianValue = NumericalJacobianForResidual ( Point , out var evaluations ) ;
488+ _jacobianValue = NumericalJacobianForResidual ( Point , out evaluations ) ;
477489 FunctionEvaluations += evaluations ;
478490 }
479491 }
@@ -489,7 +501,7 @@ void EvaluateJacobian()
489501 else
490502 {
491503 // numerical jacobian
492- _jacobianValue = NumericalJacobian ( Point , out var evaluations ) ;
504+ _jacobianValue = NumericalJacobian ( Point , out evaluations ) ;
493505 FunctionEvaluations += evaluations ;
494506 }
495507
@@ -537,7 +549,7 @@ void EvaluateJacobian()
537549 _gradientValue = - _jacobianValue . Transpose ( ) * _residuals ;
538550 }
539551
540- // approximated Hessian, H = J'WJ + ∑LRiHi ~ J'WJ near the minimum
552+ // approximated Hessian, H = J'J + ∑Ri∇²Ri ~ J'J near the minimum
541553 _hessianValue = _jacobianValue . Transpose ( ) * _jacobianValue ;
542554 }
543555
@@ -606,7 +618,7 @@ Matrix<double> NumericalJacobianForResidual(Vector<double> parameters, out int e
606618
607619 var derivatives = Matrix < double > . Build . Dense ( residualSize , NumberOfParameters ) ;
608620 evaluationCount = 0 ;
609- int totalEvaluations = 0 ;
621+ var totalEvaluations = 0 ;
610622
611623 // Process each residual component separately
612624 for ( var i = 0 ; i < residualSize ; i ++ )
0 commit comments