1 #include "QuadraticLegendre.hpp"
2 #include <cassert>
3 // coefficients in quadratic model:
4 // m = (c0 - 0.5*\sum_{i=1}^n c_{n+i})
5 //     + \sum_{i=1}^n x_i * c_i
6 //     + 0.5*x'*H*x
7 // with diag(H) = (c_{n+1}, ..., c_{2n})/3.0
8 // H_{1,2:n} = (c_{2n+1}, ..., c_{3n-1})
9 // H_{2,3:n} = (c_{3n}, ..., c_{4n-2})
10 // H_{3,4:n} = (c_{4n-1}, ..., c_{5n-3})
11 // ...
12 
13 //--------------------------------------------------------------------------------
evaluate_basis(int basis_number,std::vector<double> const & x)14 double QuadraticLegendre::evaluate_basis(
15   int basis_number, std::vector<double> const &x )
16 {
17   if ( basis_number == 0 )
18     return 1e0;
19   else if ( basis_number >= 1 && basis_number <= dim )
20     return x.at( basis_number-1 );
21   else if ( basis_number >= dim+1 && basis_number <= 2*dim )
22     return (3e0 * pow( x.at( basis_number-dim-1 ), 2e0 ) - 1e0 ) / 2e0;
23   else {
24     basis_number -= 2*dim;
25     for ( int j = 1; j <= dim-1; ++j ) {
26       if ( basis_number <= dim-j )
27         return x.at( j-1 ) * x.at( basis_number-1+j );
28       basis_number -= dim-j;
29     }
30   }
31   assert ( false );
32   return 0.0;
33 }
34 //--------------------------------------------------------------------------------
35