1 #ifndef NPSTAT_CLASSICALORTHOPOLYS1D_HH_
2 #define NPSTAT_CLASSICALORTHOPOLYS1D_HH_
30 inline long double weight(
const long double x)
const
31 {
return (x >= -1.0L && x <= 1.0L) ? 0.5L : 0.0L;}
32 inline double xmin()
const {
return -1.0L;}
33 inline double xmax()
const {
return 1.0L;}
42 double* integCoeffs)
const;
50 double* derivCoeffs)
const;
57 long double* monoCoeffs)
const;
63 long double* expansionCoeffs)
const;
65 inline virtual std::pair<long double,long double>
66 monicRecurrenceCoeffs(
const unsigned k)
const
68 long double beta = 1.0L;
70 beta = 1.0L/(4.0L - 1.0L/k/k);
71 return std::pair<long double,long double>(0.0L, beta);
74 inline virtual std::pair<long double,long double>
75 recurrenceCoeffs(
const unsigned k)
const
77 long double sqb = 1.0L;
79 sqb = 1.0L/sqrtl(4.0L - 1.0L/k/k);
80 return std::pair<long double,long double>(0.0L, sqb);
85 inline std::vector<double>
86 integralCoeffs2(
const double *c,
const unsigned degreep1)
const
88 std::vector<double> tmp(degreep1+1U);
93 inline std::vector<double>
94 derivativeCoeffs2(
const double *c,
const unsigned degreep1)
const
96 std::vector<double> tmp(std::max(degreep1-1U, 1U));
101 inline std::vector<double>
102 monomialCoeffs2(
const double *c,
const unsigned degreep1)
const
104 std::vector<long double> ldtmp(degreep1+1U);
106 return std::vector<double>(ldtmp.begin(), ldtmp.end());
109 inline std::vector<double>
110 squaredPolyCoeffs2(
const unsigned degree)
const
112 std::vector<long double> tmp(2U*degree + 1U);
114 return std::vector<double>(tmp.begin(), tmp.end());
128 inline long double weight(
const long double x)
const
129 {
return (x >= 0.0L && x <= 1.0L) ? 1.0L : 0.0L;}
130 inline double xmin()
const {
return 0.0L;}
131 inline double xmax()
const {
return 1.0L;}
140 double* integCoeffs)
const;
148 double* derivCoeffs)
const;
154 long double* expansionCoeffs)
const;
156 inline virtual std::pair<long double,long double>
157 monicRecurrenceCoeffs(
const unsigned k)
const
159 long double beta = 1.0L;
161 beta = 0.25L/(4.0L - 1.0L/k/k);
162 return std::pair<long double,long double>(0.5L, beta);
165 inline virtual std::pair<long double,long double>
166 recurrenceCoeffs(
const unsigned k)
const
168 long double sqb = 1.0L;
170 sqb = 0.5L/sqrtl(4.0L - 1.0L/k/k);
171 return std::pair<long double,long double>(0.5L, sqb);
176 inline std::vector<double>
177 integralCoeffs2(
const double *c,
const unsigned degreep1)
const
179 std::vector<double> tmp(degreep1+1U);
184 inline std::vector<double>
185 derivativeCoeffs2(
const double *c,
const unsigned degreep1)
const
187 std::vector<double> tmp(std::max(degreep1-1U, 1U));
192 inline std::vector<double>
193 squaredPolyCoeffs2(
const unsigned degree)
const
195 std::vector<long double> tmp(2U*degree + 1U);
197 return std::vector<double>(tmp.begin(), tmp.end());
216 inline double alpha()
const {
return alpha_;}
217 inline double beta()
const {
return beta_;}
220 inline double xmin()
const {
return -1.0L;}
221 inline double xmax()
const {
return 1.0L;}
233 double* derivCoeffs)
const;
235 virtual std::pair<long double,long double>
236 monicRecurrenceCoeffs(
unsigned k)
const;
238 virtual std::pair<long double,long double>
239 recurrenceCoeffs(
unsigned k)
const;
248 inline std::vector<double>
249 derivativeCoeffs2(
const double *c,
const unsigned degreep1)
const
251 std::vector<double> tmp(degreep1-1U);
253 tmp.empty() ? (
double *)0 : &tmp[0]);
268 inline long double weight(
const long double x)
const
270 const long double Pi = 3.14159265358979323846264338L;
271 return (x > -1.0L && x < 1.0L) ? 1.0/sqrtl(1.0L - x*x)/Pi : 0.0L;
273 inline double xmin()
const {
return -1.0L;}
274 inline double xmax()
const {
return 1.0L;}
276 inline virtual std::pair<long double,long double>
277 monicRecurrenceCoeffs(
const unsigned k)
const
279 long double beta = 0.25L;
281 beta = 3.14159265358979323846264338328L;
284 return std::pair<long double,long double>(0.0L, beta);
287 inline virtual std::pair<long double,long double>
288 recurrenceCoeffs(
const unsigned k)
const
290 long double sqb = 0.5L;
292 sqb = 1.772453850905516027298167483L;
294 sqb = 0.7071067811865475244008443621L;
295 return std::pair<long double,long double>(0.0L, sqb);
308 inline long double weight(
const long double x)
const
310 const long double PiOver2 = 1.57079632679489661923132169L;
311 return (x > -1.0L && x < 1.0L) ? sqrtl(1.0L - x*x)/PiOver2 : 0.0L;
313 inline double xmin()
const {
return -1.0L;}
314 inline double xmax()
const {
return 1.0L;}
316 inline virtual std::pair<long double,long double>
317 monicRecurrenceCoeffs(
const unsigned k)
const
319 long double beta = 0.25L;
321 beta = 1.57079632679489661923132169164L;
322 return std::pair<long double,long double>(0.0L, beta);
325 inline virtual std::pair<long double,long double>
326 recurrenceCoeffs(
const unsigned k)
const
328 long double sqb = 0.5L;
330 sqb = 1.25331413731550025120788264L;
331 return std::pair<long double,long double>(0.0L, sqb);
345 inline double xmin()
const {
return -xmax();}
346 inline double xmax()
const {
return 150.0;}
348 virtual std::pair<long double,long double>
349 monicRecurrenceCoeffs(
unsigned k)
const;
351 virtual std::pair<long double,long double>
352 recurrenceCoeffs(
unsigned k)
const;
Base class for classical continuous orthonormal polynomials.
Definition: AbsClassicalOrthoPoly1D.hh:32
Definition: ClassicalOrthoPolys1D.hh:261
virtual ChebyshevOrthoPoly1st * clone() const
Definition: ClassicalOrthoPolys1D.hh:263
long double weight(const long double x) const
Definition: ClassicalOrthoPolys1D.hh:268
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:273
Definition: ClassicalOrthoPolys1D.hh:301
virtual ChebyshevOrthoPoly2nd * clone() const
Definition: ClassicalOrthoPolys1D.hh:303
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:313
long double weight(const long double x) const
Definition: ClassicalOrthoPolys1D.hh:308
Definition: ClassicalOrthoPolys1D.hh:337
virtual HermiteProbOrthoPoly1D * clone() const
Definition: ClassicalOrthoPolys1D.hh:339
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:345
long double weight(long double x) const
Definition: ClassicalOrthoPolys1D.hh:207
void derivativeCoeffs(const double *coeffs, unsigned maxdeg, double *derivCoeffs) const
virtual JacobiOrthoPoly1D * clone() const
Definition: ClassicalOrthoPolys1D.hh:211
long double weight(long double x) const
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:220
Definition: ClassicalOrthoPolys1D.hh:23
long double weight(const long double x) const
Definition: ClassicalOrthoPolys1D.hh:30
void integralCoeffs(const double *coeffs, unsigned degree, double *integCoeffs) const
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:32
void derivativeCoeffs(const double *coeffs, unsigned degree, double *derivCoeffs) const
void squaredPolyCoeffs(unsigned degree, long double *expansionCoeffs) const
void monomialCoeffs(const double *coeffs, unsigned degree, long double *monoCoeffs) const
virtual LegendreOrthoPoly1D * clone() const
Definition: ClassicalOrthoPolys1D.hh:25
Definition: ClassicalOrthoPolys1D.hh:121
double xmin() const
Definition: ClassicalOrthoPolys1D.hh:130
void derivativeCoeffs(const double *coeffs, unsigned degree, double *derivCoeffs) const
virtual ShiftedLegendreOrthoPoly1D * clone() const
Definition: ClassicalOrthoPolys1D.hh:123
void squaredPolyCoeffs(unsigned degree, long double *expansionCoeffs) const
long double weight(const long double x) const
Definition: ClassicalOrthoPolys1D.hh:128
void integralCoeffs(const double *coeffs, unsigned degree, double *integCoeffs) const
Definition: AbsArrayProjector.hh:14