20#ifndef CCGSL_MULTILARGE
21#define CCGSL_MULTILARGE
24#include<gsl/gsl_multilarge.h>
32 namespace multilarge {
40 typedef gsl_multilarge_linear_type
type;
45 type const* normal = gsl_multilarge_linear_normal;
49 type const* tsqr = gsl_multilarge_linear_tsqr;
71 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
84 explicit workspace( gsl_multilarge_linear_workspace* v ){
122#ifdef __GXX_EXPERIMENTAL_CXX0X__
128 std::swap(
count, v.count );
129 v.ccgsl_pointer =
nullptr;
137 workspace( std::move( v ) ).swap( *
this );
247#ifdef __GXX_EXPERIMENTAL_CXX0X__
255 char const*
name()
const {
return gsl_multilarge_linear_name(
get() ); }
260 int reset(){
return gsl_multilarge_linear_reset(
get() ); }
267 return gsl_multilarge_linear_name( w.
get() ); }
282 return gsl_multilarge_linear_accumulate( X.
get(), y.
get(), w.
get() ); }
292 inline int solve(
double const lambda,
vector& c,
double& rnorm,
double& snorm,
294 return gsl_multilarge_linear_solve( lambda, c.
get(), &rnorm, &snorm, w.
get() ); }
302 return gsl_multilarge_linear_rcond( &
rcond, w.
get() ); }
312 return gsl_multilarge_linear_lcurve( reg_param.
get(), rho.
get(),
eta.get(), w.
get() ); }
326 return gsl_multilarge_linear_wstdform1( L.
get(), X.
get(), w.
get(), y.
get(), Xs.
get(),
340 return gsl_multilarge_linear_stdform1( L.
get(), X.
get(), y.
get(), Xs.
get(), ys.
get(),
349 return gsl_multilarge_linear_L_decomp( L.
get(), tau.
get() ); }
365 return gsl_multilarge_linear_wstdform2( LQR.
get(), Ltau.
get(), X.
get(), w.
get(), y.
get(),
380 return gsl_multilarge_linear_stdform2( LQR.
get(), Ltau.
get(), X.
get(), y.
get(),
390 return gsl_multilarge_linear_genform1( L.
get(), cs.
get(), c.
get(), work.
get() ); }
402 return gsl_multilarge_linear_genform2( LQR.
get(), Ltau.
get(), cs.
get(), c.
get(),
412 =
const_cast<gsl_matrix*
>( gsl_multilarge_linear_matrix_ptr( work.
get() ) );
414 result.wrap_gsl_matrix_without_ownership( m );
425 =
const_cast<gsl_vector*
>( gsl_multilarge_linear_rhs_ptr( work.
get() ) );
427 result.wrap_gsl_vector_without_ownership( v );
This class handles matrix objects as shared handles.
gsl_matrix * get()
Get the gsl_matrix.
Workspace for solving systems.
bool operator!=(workspace const &v) const
Two workspace are different if their elements are not identical.
bool operator>(workspace const &v) const
A container needs to define an ordering for sorting.
void swap(workspace &v)
Swap two workspace objects.
workspace & operator=(workspace &&v)
Move operator.
bool unique() const
Find if this is the only object sharing the gsl_multilarge_linear_workspace.
bool operator==(workspace const &v) const
Two workspace are identically equal if their elements are identical.
size_t use_count() const
Find how many workspace objects share this pointer.
bool operator<(workspace const &v) const
A container needs to define an ordering for sorting.
bool empty() const
Find if the workspace is empty.
workspace(gsl_multilarge_linear_workspace *v)
Could construct from a gsl_multilarge_linear_workspace*.
int reset()
C++ version of gsl_multilarge_linear_reset().
workspace(workspace &&v)
Move constructor.
workspace(workspace const &v)
The copy constructor.
size_t * count
The shared reference count.
bool operator<=(workspace const &v) const
A container needs to define an ordering for sorting.
workspace & operator=(workspace const &v)
The assignment operator.
gsl_multilarge_linear_workspace * get() const
Get the gsl_multilarge_linear_workspace.
workspace()
The default constructor is only really useful for assigning to.
gsl_multilarge_linear_workspace * ccgsl_pointer
The shared pointer.
workspace(type const *T, size_t const p)
The default constructor creates a new workspace with window length K.
char const * name() const
~workspace()
The destructor only deletes the pointers if count reaches zero.
bool operator>=(workspace const &v) const
A container needs to define an ordering for sorting.
This class handles vector objects as shared handles.
gsl_vector * get()
Get the gsl_vector.
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 accumulate(matrix &X, vector &y, workspace &w)
C++ version of gsl_multilarge_linear_accumulate().
gsl_multilarge_linear_type type
Typedef for shorthand.
int wstdform2(matrix const &LQR, vector const &Ltau, matrix const &X, vector const &w, vector const &y, matrix &Xs, vector &ys, workspace &work)
C++ version of gsl_multilarge_linear_wstdform2().
int lcurve(vector ®_param, vector &rho, vector &eta, workspace &w)
C++ version of gsl_multilarge_linear_lcurve().
char const * name(workspace const &w)
int L_decomp(matrix &L, vector &tau)
C++ version of gsl_multilarge_linear_L_decomp().
int wstdform1(vector const &L, matrix const &X, vector const &w, vector const &y, matrix &Xs, vector &ys, workspace &work)
C++ version of gsl_multilarge_linear_wstdform1().
int stdform1(vector const &L, matrix const &X, vector const &y, matrix &Xs, vector &ys, workspace &work)
C++ version of gsl_multilarge_linear_stdform1().
int genform1(vector const &L, vector const &cs, vector &c, workspace &work)
int rcond(double &rcond, workspace &w)
C++ version of gsl_multilarge_linear_rcond().
matrix const matrix_ptr(workspace const &work)
C++ version of gsl_multilarge_linear_matrix_ptr().
vector const rhs_ptr(workspace const &work)
C++ version of gsl_multilarge_linear_rhs_ptr().
int solve(double const lambda, vector &c, double &rnorm, double &snorm, workspace &w)
C++ version of gsl_multilarge_linear_solve().
int genform2(matrix const &LQR, vector const &Ltau, vector const &cs, vector &c, workspace &work)
C++ version of gsl_multilarge_linear_genform2().
int reset(workspace &w)
C++ version of gsl_multilarge_linear_reset().
int stdform2(matrix const &LQR, vector const &Ltau, matrix const &X, vector const &y, matrix &Xs, vector &ys, workspace &work)
C++ version of gsl_multilarge_linear_stdform2().
double eta(double const s)
C++ version of gsl_sf_eta().
gsl_sf_result result
Typedef for gsl_sf_result.
The gsl package creates an interface to the GNU Scientific Library for C++.