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;
|
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>
|
template <typename T, typename C>
|
||||||
NRVec<C> values(const Polynomial<T> &p, const NRVec<C> &x)
|
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;
|
int n;
|
||||||
cin >>n ;
|
cin >>n ;
|
||||||
Polynomial<int> p=hermite_polynomial<int>(n);
|
Polynomial<double> p=hermite_polynomial<double>(n);
|
||||||
cout <<"Hermite = "<<p<<std::endl;
|
cout <<"Hermite = "<<p<<std::endl;
|
||||||
cout <<"non-zero = "<< ((n&1)?p.odd_powers():p.even_powers())<<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