25#include<gsl/gsl_fit.h>
51 inline int linear(
double const* x,
size_t const xstride,
double const* y,
53 size_t const n,
double* c0,
double* c1,
double* cov00,
double* cov01,
54 double* cov11,
double* sumsq ){
55 return gsl_fit_linear( x, xstride, y, ystride,
n, c0, c1, cov00, cov01, cov11, sumsq ); }
74 inline int wlinear(
double const* x,
size_t const xstride,
double const* w,
76 double const* y,
size_t const ystride,
size_t const n,
double* c0,
78 double* cov00,
double* cov01,
double* cov11,
double*
chisq ){
79 return gsl_fit_wlinear( x, xstride, w, wstride, y, ystride,
n, c0, c1, cov00, cov01,
94 inline int linear_est(
double const x,
double const c0,
double const c1,
double const cov00,
95 double const cov01,
double const cov11,
double* y,
double* y_err ){
96 return gsl_fit_linear_est( x, c0, c1, cov00, cov01, cov11, y, y_err ); }
110 inline int mul(
double const* x,
size_t const xstride,
double const* y,
size_t const ystride,
111 size_t const n,
double* c1,
double* cov11,
double* sumsq ){
112 return gsl_fit_mul( x, xstride, y, ystride,
n, c1, cov11, sumsq ); }
128 inline int wmul(
double const* x,
size_t const xstride,
double const* w,
129 size_t const wstride,
130 double const* y,
size_t const ystride,
size_t const n,
131 double* c1,
double* cov11,
double*
chisq ){
132 return gsl_fit_wmul( x, xstride, w, wstride, y, ystride,
n, c1, cov11,
chisq ); }
143 inline int mul_est(
double const x,
double const c1,
double const cov11,
double* y,
double* y_err ){
144 return gsl_fit_mul_est( x, c1, cov11, y, y_err ); }
161 inline int linear(
double const* x,
double const* y,
162 size_t const n,
double* c0,
double* c1,
double* cov00,
163 double* cov01,
double* cov11,
165 return gsl_fit_linear( x, 1, y, 1,
n, c0, c1, cov00, cov01, cov11, sumsq ); }
181 inline int wlinear(
double const* x,
double const* w,
182 double const* y,
size_t const n,
double* c0,
double* c1,
183 double* cov00,
double* cov01,
double* cov11,
double*
chisq ){
184 return gsl_fit_wlinear( x, 1, w, 1, y, 1,
n, c0, c1, cov00, cov01, cov11,
chisq ); }
196 inline int mul(
double const* x,
double const* y,
197 size_t const n,
double* c1,
double* cov11,
double* sumsq ){
198 return gsl_fit_mul( x, 1, y, 1,
n, c1, cov11, sumsq ); }
211 inline int wmul(
double const* x,
double const* w,
212 double const* y,
size_t const n,
double* c1,
double* cov11,
214 return gsl_fit_wmul( x, 1, w, 1, y, 1,
n, c1, cov11,
chisq ); }
234 double* cov00,
double* cov01,
double* cov11,
double* sumsq,
235 size_t const n = 0 ){
237 n == 0 ? y.
size() / y.
get()->stride :
n, c0, c1, cov00,
238 cov01, cov11, sumsq ); }
256 gsl::vector const& y,
double* c0,
double* c1,
double* cov00,
258 double* cov11,
double*
chisq,
size_t const n = 0 ){
261 cov00, cov01, cov11,
chisq ); }
276 double* sumsq,
size_t const n = 0 ){
278 n == 0 ? y.
size() / y.
get()->stride :
n, c1, cov11, sumsq ); }
295 size_t const n = 0 ){
298 c1, cov11,
chisq ); }
317 template<
typename ARRAY>
318 inline int linear( ARRAY
const& x, ARRAY
const& y,
double* c0,
double* c1,
319 double* cov00,
double* cov01,
double* cov11,
double* sumsq,
320 size_t const n = 0 ){
321 return linear( x.data(), 1, y.data(), 1,
322 n == 0 ? y.size() :
n, c0, c1, cov00, cov01, cov11, sumsq ); }
340 template<
typename ARRAY>
341 inline int wlinear( ARRAY
const& x, ARRAY
const& w,
342 ARRAY
const& y,
double* c0,
double* c1,
double* cov00,
double* cov01,
343 double* cov11,
double*
chisq,
size_t const n = 0 ){
344 return wlinear( x.data(), 1, w.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n, c0, c1,
345 cov00, cov01, cov11,
chisq ); }
359 template<
typename ARRAY>
360 inline int mul( ARRAY
const& x, ARRAY
const& y,
double* c1,
double* cov11,
361 double* sumsq,
size_t const n = 0 ){
362 return mul( x.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n, c1, cov11, sumsq ); }
377 template<
typename ARRAY>
378 inline int wmul( ARRAY
const& x, ARRAY
const& w,
379 ARRAY
const& y,
double* c1,
double* cov11,
double*
chisq,
380 size_t const n = 0 ){
381 return wmul( x.data(), 1, w.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n,
382 c1, cov11,
chisq ); }
399 template<
typename ARRAY>
400 inline int linear( ARRAY
const& x, ARRAY
const& y,
double& c0,
double& c1,
401 double& cov00,
double& cov01,
double& cov11,
double& sumsq,
402 size_t const n = 0 ){
404 if( x.size() != y.size() )
405 throw std::length_error(
"gsl::fit::linear(): x and y must have same size.");
408 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have x.size() = n.");
410 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have y.size() = n.");
412 return linear( x.data(), 1, y.data(), 1,
413 n == 0 ? y.size() :
n, &c0, &c1, &cov00, &cov01, &cov11, &sumsq ); }
431 template<
typename ARRAY>
432 inline int wlinear( ARRAY
const& x, ARRAY
const& w,
433 ARRAY
const& y,
double& c0,
double& c1,
double& cov00,
double& cov01,
434 double& cov11,
double&
chisq,
size_t const n = 0 ){
436 if( x.size() != y.size() )
437 throw std::length_error(
"gsl::fit::linear(): x and y must have same size.");
438 if( w.size() != y.size() )
439 throw std::length_error(
"gsl::fit::linear(): w and y must have same size.");
442 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have x.size() = n.");
444 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have y.size() = n.");
446 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have w.size() = n.");
448 return wlinear( x.data(), 1, w.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n, &c0, &c1,
449 &cov00, &cov01, &cov11, &
chisq ); }
463 template<
typename ARRAY>
464 inline int mul( ARRAY
const& x, ARRAY
const& y,
double& c1,
double& cov11,
465 double& sumsq,
size_t const n = 0 ){
467 if( x.size() != y.size() )
468 throw std::length_error(
"gsl::fit::linear(): x and y must have same size.");
471 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have x.size() = n.");
473 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have y.size() = n.");
475 return mul( x.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n, &c1, &cov11, &sumsq ); }
490 template<
typename ARRAY>
491 inline int wmul( ARRAY
const& x, ARRAY
const& w,
492 ARRAY
const& y,
double& c1,
double& cov11,
double&
chisq,
493 size_t const n = 0 ){
495 if( x.size() != y.size() )
496 throw std::length_error(
"gsl::fit::linear(): x and y must have same size.");
497 if( w.size() != y.size() )
498 throw std::length_error(
"gsl::fit::linear(): w and y must have same size.");
501 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have x.size() = n.");
503 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have y.size() = n.");
505 throw std::length_error(
"gsl::fit::linear(): if n ≠ 0, you must have w.size() = n.");
507 return wmul( x.data(), 1, w.data(), 1, y.data(), 1,
n == 0 ? y.size() :
n,
508 &c1, &cov11, &
chisq ); }
This class handles vector objects as shared handles.
gsl_vector * get()
Get the gsl_vector.
size_type size() const
The size (number of elements) of the vector.
double * data()
Give access to the data block.
int wmul(double const *x, size_t const xstride, double const *w, size_t const wstride, double const *y, size_t const ystride, size_t const n, double *c1, double *cov11, double *chisq)
C++ version of gsl_fit_wmul().
int mul(double const *x, size_t const xstride, double const *y, size_t const ystride, size_t const n, double *c1, double *cov11, double *sumsq)
C++ version of gsl_fit_mul().
int linear(double const *x, size_t const xstride, double const *y, size_t const ystride, size_t const n, double *c0, double *c1, double *cov00, double *cov01, double *cov11, double *sumsq)
C++ version of gsl_fit_linear().
int mul_est(double const x, double const c1, double const cov11, double *y, double *y_err)
C++ version of gsl_fit_mul_est().
int linear_est(double const x, double const c0, double const c1, double const cov00, double const cov01, double const cov11, double *y, double *y_err)
C++ version of gsl_fit_linear_est().
int wlinear(double const *x, size_t const xstride, double const *w, size_t const wstride, double const *y, size_t const ystride, size_t const n, double *c0, double *c1, double *cov00, double *cov01, double *cov11, double *chisq)
C++ version of gsl_fit_wlinear().
double chisq(rng const &r, double const nu)
C++ version of gsl_ran_chisq().
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
The gsl package creates an interface to the GNU Scientific Library for C++.