diff --git a/polynomial.h b/polynomial.h index dafb6ec..6afc932 100644 --- a/polynomial.h +++ b/polynomial.h @@ -175,6 +175,45 @@ sum += p[0]; return sum; } +//evaluate only even powers +template +C even_value(const Polynomial &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 +C odd_value(const Polynomial &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 NRVec values(const Polynomial &p, const NRVec &x) { diff --git a/t.cc b/t.cc index cead833..16faeda 100644 --- a/t.cc +++ b/t.cc @@ -2288,9 +2288,10 @@ if(1) { int n; cin >>n ; -Polynomial p=hermite_polynomial(n); +Polynomial p=hermite_polynomial(n); cout <<"Hermite = "<