51 std::cout<<
"computing qOrder="<<qOrder<<
"..."<<std::flush;
54 Eigen::MatrixXd jUT = Eigen::MatrixXd::Zero(qOrder,qOrder);
55 for (
int n=0;n<qOrder;++n)
58 jUT(n,n) = -PolynomialType::b(
k)/PolynomialType::a(
k);
61 jUT(n,n+1)= std::sqrt(PolynomialType::c(
k+1)/PolynomialType::a(
k)/PolynomialType::a(
k+1));
66 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es(jUT.template selfadjointView<Eigen::Upper>());
67 Eigen::VectorXd eigenVal = es.eigenvalues();
68 Eigen::MatrixXd eigenVec = es.eigenvectors();
71 typedef std::set<std::pair<double,double> > EigenSetType;
72 typedef EigenSetType::const_iterator EigenSetIterType;
73 EigenSetType eigenSet;
74 for (
int k=0;
k<qOrder;++
k)
76 eigenSet.insert( std::make_pair( (eigenVal(
k)+1.0)*0.5, std::pow(eigenVec(0,
k),2) ) );
80 Eigen::MatrixXd abcsissasAndWeights_(Eigen::MatrixXd::Zero(
dim+1,qOrder));
82 for (EigenSetIterType iter=eigenSet.begin(); iter!=eigenSet.end();++iter)
84 abcsissasAndWeights_(0,
k)= iter->first;
85 abcsissasAndWeights_(1,
k)= iter->second;
89 std::cout<<
" done."<<std::endl;
92 return abcsissasAndWeights_;