--- Kst-2.0.8/src/plugins/fits/non_linear.h 2014-02-13 18:41:44.000000000 +0900
+++ Kst-2.0.8/src/plugins/fits/non_linear.h 2016-03-04 00:34:31.000000000 +0900
@@ -177,37 +177,45 @@
}
iIterations++;
} while( iStatus == GSL_CONTINUE && iIterations < MAX_NUM_ITERATIONS );
- gsl_multifit_covar( pSolver->J, 0.0, pMatrixCovariance );
-
- //
- // determine the fitted values...
- //
- for( i=0; i<NUM_PARAMS; i++ ) {
- dXInitial[i] = gsl_vector_get( pSolver->x, i );
- }
-
- for( i=0; i<iLength; i++ ) {
- vectorOutYFitted->value()[i] = function_calculate( pInputX[i], dXInitial );
- vectorOutYResiduals->value()[i] = pInputY[i] - vectorOutYFitted->value()[i];
+
+
+ gsl_matrix *J = gsl_matrix_alloc(pSolver->fdf->n, pSolver->fdf->p);
+ if (J != NULL) {
+ gsl_multifit_fdfsolver_jac(pSolver, J);
+
+ gsl_multifit_covar( J, 0.0, pMatrixCovariance );
+
+ //
+ // determine the fitted values...
+ //
+ for( i=0; i<NUM_PARAMS; i++ ) {
+ dXInitial[i] = gsl_vector_get( pSolver->x, i );
+ }
+
+ for( i=0; i<iLength; i++ ) {
+ vectorOutYFitted->value()[i] = function_calculate( pInputX[i], dXInitial );
+ vectorOutYResiduals->value()[i] = pInputY[i] - vectorOutYFitted->value()[i];
+ }
+
+ //
+ // fill in the parameter values and covariance matrix...
+ //
+ for( i=0; i<NUM_PARAMS; i++ ) {
+ vectorOutYParameters->value()[i] = gsl_vector_get( pSolver->x, i );
+ for( j=0; j<NUM_PARAMS; j++ ) {
+ vectorOutYCovariance->value()[(i*NUM_PARAMS)+j] = gsl_matrix_get( pMatrixCovariance, i, j );
+ }
+ }
+
+ //
+ // determine the value of chi^2/nu
+ //
+ scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
+
+ bReturn = true;
+
+ gsl_matrix_free( J );
}
-
- //
- // fill in the parameter values and covariance matrix...
- //
- for( i=0; i<NUM_PARAMS; i++ ) {
- vectorOutYParameters->value()[i] = gsl_vector_get( pSolver->x, i );
- for( j=0; j<NUM_PARAMS; j++ ) {
- vectorOutYCovariance->value()[(i*NUM_PARAMS)+j] = gsl_matrix_get( pMatrixCovariance, i, j );
- }
- }
-
- //
- // determine the value of chi^2/nu
- //
- scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
-
- bReturn = true;
-
gsl_matrix_free( pMatrixCovariance );
}
gsl_multifit_fdfsolver_free( pSolver );
--- Kst-2.0.8/src/plugins/fits/non_linear_weighted.h 2014-02-13 18:41:44.000000000 +0900
+++ Kst-2.0.8/src/plugins/fits/non_linear_weighted.h 2016-03-04 00:37:41.000000000 +0900
@@ -193,37 +193,43 @@
}
while( iStatus == GSL_CONTINUE && iIterations < MAX_NUM_ITERATIONS );
- gsl_multifit_covar( pSolver->J, 0.0, pMatrixCovariance );
-
- //
- // determine the fitted values...
- //
- for( i=0; i<NUM_PARAMS; i++ ) {
- dXInitial[i] = gsl_vector_get( pSolver->x, i );
- }
-
- for( i=0; i<iLength; i++ ) {
- vectorOutYFitted->value()[i] = function_calculate( pInputs[XVALUES][i], dXInitial );
- vectorOutYResiduals->value()[i] = pInputs[YVALUES][i] - vectorOutYFitted->value()[i];
- }
-
- //
- // fill in the parameter values and covariance matrix...
- //
- for( i=0; i<NUM_PARAMS; i++ ) {
- vectorOutYParameters->value()[i] = gsl_vector_get( pSolver->x, i );
- for( j=0; j<NUM_PARAMS; j++ ) {
- vectorOutYCovariance->value()[(i*NUM_PARAMS)+j] = gsl_matrix_get( pMatrixCovariance, i, j );
- }
+ gsl_matrix *J = gsl_matrix_alloc(pSolver->fdf->n, pSolver->fdf->p);
+ if (J != NULL) {
+ gsl_multifit_fdfsolver_jac(pSolver, J);
+
+ gsl_multifit_covar( J, 0.0, pMatrixCovariance );
+
+ //
+ // determine the fitted values...
+ //
+ for( i=0; i<NUM_PARAMS; i++ ) {
+ dXInitial[i] = gsl_vector_get( pSolver->x, i );
+ }
+
+ for( i=0; i<iLength; i++ ) {
+ vectorOutYFitted->value()[i] = function_calculate( pInputs[XVALUES][i], dXInitial );
+ vectorOutYResiduals->value()[i] = pInputs[YVALUES][i] - vectorOutYFitted->value()[i];
+ }
+
+ //
+ // fill in the parameter values and covariance matrix...
+ //
+ for( i=0; i<NUM_PARAMS; i++ ) {
+ vectorOutYParameters->value()[i] = gsl_vector_get( pSolver->x, i );
+ for( j=0; j<NUM_PARAMS; j++ ) {
+ vectorOutYCovariance->value()[(i*NUM_PARAMS)+j] = gsl_matrix_get( pMatrixCovariance, i, j );
+ }
+ }
+
+ //
+ // determine the value of chi^2/nu
+ //
+ scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
+
+ bReturn = true;
+
+ gsl_matrix_free( J );
}
-
- //
- // determine the value of chi^2/nu
- //
- scalarOutChi->setValue(gsl_blas_dnrm2( pSolver->f ));
-
- bReturn = true;
-
gsl_matrix_free( pMatrixCovariance );
}
gsl_multifit_fdfsolver_free( pSolver );