79 else if (d>0) {
return 1;}
110 for( i=0 ; i<count ; i++ )
112 if( !c || sps[i].start!=
polys[c-1].start )
polys[c++] = sps[i];
113 else{
polys[c-1].p+=sps[i].
p;}
117 template <
int Degree>
147 template<
int Degree2>
169 double start,end,s,v=0;
180 v+=
polys[i].p.integral(s,end);
224 std::size_t idx=0,cnt=0,oldPolyCount=
polyCount;
232 else if (oldPolys[i+1].start<p.
polys[j+1].start){
polys[idx]=oldPolys[++i];}
243 template<
int Degree2>
260 template<
int Degree2>
291 q.polys[i].start=
polys[i].start;
292 q.polys[i].p=
polys[i].p.derivative();
359 printf(
"[-Infinity,Infinity]\n");
364 if (
polys[i ].start== DBL_MAX){printf(
"Infinity,");}
365 else if (
polys[i ].start==-DBL_MAX){printf(
"-Infinity,");}
366 else {printf(
"%f,",
polys[i].start);}
367 if(i+1==
polyCount) {printf(
"Infinity]\t");}
368 else if (
polys[i+1].start== DBL_MAX){printf(
"Infinity]\t");}
369 else if (
polys[i+1].start==-DBL_MAX){printf(
"-Infinity]\t");}
370 else {printf(
"%f]\t",
polys[i+1].start);}
383 q.
polys[0].start=-radius;
384 q.
polys[1].start= radius;
386 q.
polys[0].p.coefficients[0]= 1.0;
387 q.
polys[1].p.coefficients[0]=-1.0;
390 template<
int Degree >
408 sps[2*i ].
p=p.
shift(-radius);
409 sps[2*i+1].
p=p.
shift( radius)*-1;
413 return A*1.0/(2*radius);
418 std::vector<double> tempRoots;
423 if(
polys[i].start>max){
break;}
426 for(std::size_t j=0;j<tempRoots.size();j++){
428 if(tempRoots[j]>min && tempRoots[j]<max){roots.push_back(tempRoots[j]);}
436 fwrite(&samples,
sizeof(
int),1,fp);
437 for(
int i=0;i<samples;i++){
438 double x=min+i*(max-min)/(samples-1);
440 fwrite(&v,
sizeof(
float),1,fp);
PPolynomial operator-(const PPolynomial &p) const
PPolynomial operator/(double s) const
StartingPolynomial< Degree > * polys
double integral(double tMin, double tMax) const
PPolynomial & operator-=(double s)
PPolynomial shift(double t) const
void getSolutions(double c, std::vector< double > &roots, double EPS, double min=-DBL_MAX, double max=DBL_MAX) const
PPolynomial & operator=(const PPolynomial &p)
double operator()(double t) const
PPolynomial & operator+=(double s)
PPolynomial & operator/=(double s)
PPolynomial & operator*=(double s)
void write(FILE *fp, int samples, double min, double max) const
void reset(std::size_t newSize)
PPolynomial operator+(const PPolynomial &p) const
PPolynomial scale(double s) const
PPolynomial< Degree+1 > integral(void) const
static PPolynomial BSpline(double radius=0.5)
PPolynomial< Degree+Degree2 > operator*(const Polynomial< Degree2 > &p) const
void set(std::size_t size)
PPolynomial & addScaled(const PPolynomial &poly, double scale)
PPolynomial< Degree-1 > derivative(void) const
PPolynomial< Degree+1 > MovingAverage(double radius)
double Integral(void) const
Polynomial shift(double t) const
void getSolutions(double c, std::vector< double > &roots, double EPS) const
StartingPolynomial shift(double t) const
StartingPolynomial< Degree+Degree2 > operator*(const StartingPolynomial< Degree2 > &p) const
StartingPolynomial scale(double s) const
int operator<(const StartingPolynomial &sp) const
static int Compare(const void *v1, const void *v2)