2 set (void *vstate, gsl_multifit_function_fdf * fdf, gsl_vector * x, gsl_vector * f, gsl_matrix * J, gsl_vector * dx, int scale)
4 lmder_state_t *state = (lmder_state_t *) vstate;
6 gsl_matrix *r = state->r;
7 gsl_vector *tau = state->tau;
8 gsl_vector *diag = state->diag;
9 gsl_vector *work1 = state->work1;
10 gsl_permutation *perm = state->perm;
14 GSL_MULTIFIT_FN_EVAL_F_DF (fdf, x, f, J);
18 state->fnorm = enorm (f);
20 gsl_vector_set_all (dx, 0.0);
22 /* store column norms in diag */
26 compute_diag (J, diag);
30 gsl_vector_set_all (diag, 1.0);
33 /* set delta to 100 |D x| or to 100 if |D x| is zero */
35 state->xnorm = scaled_enorm (diag, x);
36 state->delta = compute_delta (diag, x);
38 /* Factorize J into QR decomposition */
40 gsl_matrix_memcpy (r, J);
41 gsl_linalg_QRPT_decomp (r, tau, perm, &signum, work1);
43 gsl_vector_set_zero (state->rptdx);
44 gsl_vector_set_zero (state->w);
46 /* Zero the trial vector, as in the alloc function */
48 gsl_vector_set_zero (state->f_trial);
51 printf("r = "); gsl_matrix_fprintf(stdout, r, "%g");
52 printf("perm = "); gsl_permutation_fprintf(stdout, perm, "%d");
53 printf("tau = "); gsl_vector_fprintf(stdout, tau, "%g");