|
Go to the documentation of this file. 1 #ifndef NPSTAT_OSDE1D_HH_
2 #define NPSTAT_OSDE1D_HH_
24 #include "npstat/wrap/arrayNDToNumpy.hh"
25 #include "npstat/wrap/numpyArrayUtils.hh"
45 double xmin, double xmax);
55 inline double xmin() const { return xmin_;}
56 inline double xmax() const { return xmax_;}
57 double weight( double x) const;
61 inline double poly( const unsigned deg, const double x) const
62 { return poly_-> poly(deg, (x - shift_)/scale_);}
69 unsigned deg1, unsigned deg2, double x) const;
72 double series( const double* coeffs, unsigned maxdeg, double x) const;
76 const unsigned maxdeg) const
81 const unsigned power) const
86 const unsigned* degrees, unsigned nDegrees) const
102 template < class Functor, class Quadrature>
104 double* coeffs, unsigned maxdeg) const;
112 unsigned nIntegrationPoints,
113 double* coeffs, unsigned maxdeg) const;
121 unsigned nIntegrationPoints,
122 const double* coeffs, unsigned maxdeg,
123 double expectedSampleSize,
124 double* variances) const;
132 unsigned nIntegrationPoints,
133 const double* coeffs, unsigned maxdeg,
134 double expectedSampleSize) const;
143 template < class Numeric>
145 double* coeffs, unsigned maxdeg) const;
151 template < class Numeric>
153 const double* coeffs, unsigned maxdeg,
154 double* variances) const;
160 template < class Numeric>
163 const double* coeffs, unsigned maxdeg) const;
175 template < class Pair>
177 double* coeffs, unsigned maxdeg) const;
185 template < class Pair>
187 const double* coeffs, unsigned maxdeg,
188 double* variances) const;
196 template < class Pair>
199 const double* coeffs, unsigned maxdeg) const;
205 template < class Functor, class Quadrature>
207 const Quadrature& quad,
208 const double* coeffs,
209 unsigned maxdeg) const;
218 template < class Functor, class Quadrature>
220 const Quadrature& quad,
221 const double* coeffs,
223 double xmin, double xmax) const;
235 double leftLimit, bool leftIsFromSample,
236 double rightLimit, bool rightIsFromSample,
237 unsigned long nPoints);
249 const double* variances,
250 unsigned maxdeg, double k = 2.0);
261 inline double integrateSeries_2(
262 const double* coeffs, unsigned nCoeffs) const
268 inline double series_2( const double* coeffs, unsigned nCoeffs,
269 const double x) const
272 return this-> series(coeffs, nCoeffs-1U, x);
275 inline PyObject* seriesScan( const double* coeffs, unsigned nCoeffs,
276 const unsigned nOut) const
279 const unsigned maxdeg = nCoeffs - 1U;
280 const int typenum = NumpyTypecode<double>::code;
282 PyObject* xarr = PyArray_SimpleNew(1, &sh, typenum);
283 PyObject* yarr = PyArray_SimpleNew(1, &sh, typenum);
290 double* x = ( double*)PyArray_DATA((PyArrayObject*)xarr);
291 double* y = ( double*)PyArray_DATA((PyArrayObject*)yarr);
292 const double dx = (xmax_ - xmin_)/nOut;
293 for ( unsigned i=0; i<nOut; ++i)
295 x[i] = xmin_ + (i + 0.5)*dx;
296 y[i] = this-> series(coeffs, maxdeg, x[i]);
299 catch ( const std::exception& e)
306 return Py_BuildValue( "(OO)", xarr, yarr);
316 inline void densityCoeffs_2( const AbsDistribution1D& distro,
317 unsigned nIntegrationPoints,
318 double* coeffsOut, unsigned nCoeffsOut) const
321 this-> densityCoeffs(distro, nIntegrationPoints, coeffsOut, nCoeffsOut-1);
324 inline void densityCoeffsVariance_2( const AbsDistribution1D& distro,
325 unsigned nIntegrationPoints,
326 const double* coeffs, unsigned nCoeffs,
327 double expectedSampleSize,
328 double* coeffsOut, unsigned nCoeffsOut) const
331 if (!(nCoeffs == nCoeffsOut)) throw std::invalid_argument(
332 "In npstat::OSDE1D::densityCoeffsVariance_2: incompatible output array");
334 nCoeffs-1U, expectedSampleSize, coeffsOut);
338 densityCoeffsCovariance_2( const AbsDistribution1D& distro,
339 unsigned nIntegrationPoints,
340 const double* coeffs, unsigned nCoeffs,
341 double expectedSampleSize) const
345 coeffs, nCoeffs-1, expectedSampleSize);
349 inline void sampleCoeffs_2( const Vec& sample,
350 double* coeffsOut, unsigned nCoeffsOut) const
352 const unsigned long sz = sample.size();
353 const typename Vec::value_type *in = 0;
361 inline void sampleCoeffsVariance_2( const Vec& sample,
362 const double *coeffs, unsigned nCoeffs,
363 double* coeffsOut, unsigned nCoeffsOut) const
365 const unsigned long sz = sample.size();
366 const typename Vec::value_type *in = 0;
370 if (!(nCoeffs == nCoeffsOut)) throw std::invalid_argument(
371 "In npstat::OSDE1D::sampleCoeffsVariance_2: incompatible output array");
377 const Vec& sample, const double *coeffs, unsigned nCoeffs) const
379 const unsigned long sz = sample.size();
380 const typename Vec::value_type *in = 0;
387 template < class Quadrature>
388 inline void calculateCoeffs_2( const AbsDistribution1D& d,
389 const Quadrature& quad,
390 double* coeffsOut, unsigned nCoeffsOut) const
392 DensityFunctor1D fcn(d);
397 template < class Quadrature>
398 inline double integratedSquaredError_2( const AbsDistribution1D& d,
399 const Quadrature& quad,
400 const double* coeffs, unsigned nCoeffs) const
402 DensityFunctor1D fcn(d);
408 inline void weightedSampleCoeffs_2( const Vec& sample,
409 double* coeffsOut, unsigned nCoeffsOut) const
411 const unsigned long sz = sample.size();
412 const typename Vec::value_type *in = 0;
421 const Vec& sample, const double *coeffs, unsigned nCoeffs) const
423 const unsigned long sz = sample.size();
424 const typename Vec::value_type *in = 0;
433 weightedSampleCoeffsVariance_2( const Vec& sample,
434 const double *coeffs, unsigned nCoeffs,
435 double* coeffsOut, unsigned nCoeffsOut) const
437 const unsigned long sz = sample.size();
438 const typename Vec::value_type *in = 0;
442 if (!(nCoeffs == nCoeffsOut)) throw std::invalid_argument(
443 "In npstat::OSDE1D::weightedSampleCoeffsVariance_2: incompatible output array");
447 inline static unsigned optimalDegreeHart_2( const double* coeffs, unsigned nCoeffs,
448 const double* variances, unsigned nVariances,
452 if (!(nCoeffs == nVariances)) throw std::invalid_argument(
453 "In npstat::OSDE1D::optimalDegreeHart_2: incompatible input arrays");
460 #include "npstat/stat/OSDE1D.icc"
Base class for classical continuous orthonormal polynomials.
Interface definition for 1-d continuous statistical distributions.
Definition: AbsClassicalOrthoPoly1D.hh:32
double jointIntegral(const unsigned *degrees, unsigned nDegrees) const
double integrateSeries(const double *coeffs, unsigned maxdeg) const
long double poly(unsigned deg, long double x) const
double integratePoly(unsigned degree, unsigned power) const
Matrix< double > tMatrix(unsigned maxdeg) const
double integrateSeries(const double *coeffs, const unsigned maxdeg) const Definition: OSDE1D.hh:75
static unsigned optimalDegreeHart(const double *coeffs, const double *variances, unsigned maxdeg, double k=2.0)
double integratePoly(const unsigned degree, const unsigned power) const Definition: OSDE1D.hh:80
double poly(const unsigned deg, const double x) const Definition: OSDE1D.hh:61
npstat::Matrix< double > densityCoeffsCovariance(const AbsDistribution1D &distro, unsigned nIntegrationPoints, const double *coeffs, unsigned maxdeg, double expectedSampleSize) const
void densityCoeffs(const AbsDistribution1D &distro, unsigned nIntegrationPoints, double *coeffs, unsigned maxdeg) const
void weightedSampleCoeffsVariance(const Pair *points, unsigned long nPoints, const double *coeffs, unsigned maxdeg, double *variances) const
npstat::Matrix< double > weightedSampleCoeffsCovariance(const Pair *points, unsigned long nPoints, const double *coeffs, unsigned maxdeg) const
void sampleCoeffs(const Numeric *coords, unsigned long lenCoords, double *coeffs, unsigned maxdeg) const
static std::pair< double, double > supportRegion(const AbsClassicalOrthoPoly1D &poly1d, double leftLimit, bool leftIsFromSample, double rightLimit, bool rightIsFromSample, unsigned long nPoints)
std::pair< double, double > twopoly(unsigned deg1, unsigned deg2, double x) const
void calculateCoeffs(const Functor &fcn, const Quadrature &quad, double *coeffs, unsigned maxdeg) const
void densityCoeffsVariance(const AbsDistribution1D &distro, unsigned nIntegrationPoints, const double *coeffs, unsigned maxdeg, double expectedSampleSize, double *variances) const
double integratedSquaredError(const Functor &fcn, const Quadrature &quad, const double *coeffs, unsigned maxdeg, double xmin, double xmax) const
void sampleCoeffsVariance(const Numeric *coords, unsigned long lenCoords, const double *coeffs, unsigned maxdeg, double *variances) const
double integratedSquaredError(const Functor &fcn, const Quadrature &quad, const double *coeffs, unsigned maxdeg) const
OSDE1D(const AbsClassicalOrthoPoly1D &poly1d, double xmin, double xmax)
const AbsClassicalOrthoPoly1D & clpoly() const Definition: OSDE1D.hh:54
void weightedSampleCoeffs(const Pair *points, unsigned long numPoints, double *coeffs, unsigned maxdeg) const
double jointIntegral(const unsigned *degrees, unsigned nDegrees) const Definition: OSDE1D.hh:85
npstat::Matrix< double > sampleCoeffsCovariance(const Numeric *coords, unsigned long lenCoords, const double *coeffs, unsigned maxdeg) const
double series(const double *coeffs, unsigned maxdeg, double x) const
Definition: AbsArrayProjector.hh:14
Definition: AbsDistribution1D.hh:31
|