implementation of value of odd and even polynomials
This commit is contained in:
parent
4c420b1e9b
commit
ef1d3c3e3d
39
polynomial.h
39
polynomial.h
@ -175,6 +175,45 @@ sum += p[0];
|
||||
return sum;
|
||||
}
|
||||
|
||||
//evaluate only even powers
|
||||
template <typename T, typename C>
|
||||
C even_value(const Polynomial<T> &p, const C &x)
|
||||
{
|
||||
C sum(x);
|
||||
sum=0; //get matrix dimension if C is a matrix
|
||||
int d=p.degree();
|
||||
if(d&1) --d;
|
||||
C x2 = x*x;
|
||||
for(int i=d; i>0; i-=2)
|
||||
{
|
||||
sum+= p[i];
|
||||
sum= sum*x2; //not *= for matrices
|
||||
}
|
||||
sum += p[0];
|
||||
return sum;
|
||||
}
|
||||
|
||||
//evaluate only odd powers
|
||||
template <typename T, typename C>
|
||||
C odd_value(const Polynomial<T> &p, const C &x)
|
||||
{
|
||||
C sum(x);
|
||||
sum=0; //get matrix dimension if C is a matrix
|
||||
int d=p.degree();
|
||||
if(d==0) return sum;
|
||||
if((d&1)==0) --d;
|
||||
C x2 = x*x;
|
||||
for(int i=d; i>2; i-=2)
|
||||
{
|
||||
sum+= p[i];
|
||||
sum= sum*x2; //not *= for matrices
|
||||
}
|
||||
sum += p[1];
|
||||
sum *= x;
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
||||
template <typename T, typename C>
|
||||
NRVec<C> values(const Polynomial<T> &p, const NRVec<C> &x)
|
||||
{
|
||||
|
3
t.cc
3
t.cc
@ -2288,9 +2288,10 @@ if(1)
|
||||
{
|
||||
int n;
|
||||
cin >>n ;
|
||||
Polynomial<int> p=hermite_polynomial<int>(n);
|
||||
Polynomial<double> p=hermite_polynomial<double>(n);
|
||||
cout <<"Hermite = "<<p<<std::endl;
|
||||
cout <<"non-zero = "<< ((n&1)?p.odd_powers():p.even_powers())<<std::endl;
|
||||
cout <<"value = "<<value(p,1.23456789)<<" "<<odd_value(p,1.23456789)+even_value(p,1.23456789)<<endl;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user