342
/* fit a polynomial (Numerical Recipes), modified for echelle! */
342
/* fit a polynomial, modified for echelle! */
350
/* new - dlfit not lfit*/
351
double *sig, chisq, **covar;
354
covar = (double **) dmatrix (1, fit_deg, 1, fit_deg);
355
sig = (double *) dvector (1, npixi);
356
ia = (int *) ivector (1, fit_deg);
358
xin = (double *) dvector (1, npixi);
359
yin = (double *) dvector (1, npixi);
347
cpl_vector * sample = cpl_vector_new(npixi);
348
cpl_vector * values = cpl_vector_new(npixi);
349
cpl_vector * errors = cpl_vector_new(npixi);
363
350
for (i = 0; i < npixi; i++)
365
xin[i+1] = (double) ximage[i];
366
yin[i+1] = (double) inimage[i];
367
sig[i+1] = (double) sigin[i];;
369
for (i = 1 ; i <= fit_deg ; i++)
373
dlfit (xin, yin, sig, npixi, ad, ia, fit_deg, covar, &chisq, dpoly);
375
for (i = 0; i < npixo; i++)
377
xout = (double) ximageo[i];
378
outimage[i] = (float) eval_dpoly (xout, ad, fit_deg);
382
free_dvector(xin, 1, npixi);
383
free_dvector(yin, 1, npixi);
384
free_dvector(sig, 1, npixi);
385
free_dmatrix(covar, 1, fit_deg, 1, fit_deg);
386
free_ivector(ia, 1, fit_deg);
352
cpl_vector_set(sample, i, ximage[i]);
353
cpl_vector_set(values, i, inimage[i]);
354
cpl_vector_set(errors, i, sigin[i]);
356
cpl_matrix * design = polyvander1d(sample, fit_deg - 1);
358
lsqfit(design, values, errors, &coef);
359
cpl_vector_delete(sample);
360
cpl_matrix_delete(design);
361
sample = cpl_vector_new(npixo);
362
for (i = 0; i < npixo; i++)
364
cpl_vector_set(sample, i, ximageo[i]);
366
design = polyvander1d(sample, fit_deg - 1);
367
cpl_vector * fitted = eval_poly(design, coef);
369
for (i = 0; i < npixo; i++)
371
outimage[i] = cpl_vector_get(fitted, i);
373
for (i = 1; i <= fit_deg; i++) {
374
ad[i] = cpl_matrix_get(coef, i - 1, 0);
377
cpl_vector_delete(sample);
378
cpl_vector_delete(values);
379
cpl_vector_delete(errors);
380
cpl_vector_delete(fitted);
381
cpl_matrix_delete(coef);
382
cpl_matrix_delete(design);