1 #ifndef BORDERBASIX_CUBATURE_HPP
2 #define BORDERBASIX_CUBATURE_HPP
10 #include <tensor-decomposition/Decomposer.hpp>
11 #define MMX_DEBUG_COUT
13 #define TMPL template<class T>
42 void run(
int k, list<Polynomial> list2);
63 void init_rnd_obj(
unsigned s);
64 void init_idt_obj(
unsigned s);
72 double m_eps_reconstr;
89 m_eps_reconstr(1e-5), m_verbose(0) {
98 for(
unsigned j=0;
j<s*s;
j++) {
100 tmp[
j]=double(rand())/RAND_MAX;
105 for(
unsigned k=0;
k<s;
k++)
106 for(
unsigned l=0;l<s;l++)
107 for(
unsigned n=0;n<s;n++)
108 m_P[
k*s+l] += tmp[
k*s+n]*tmp[l*s+n];
118 for(
unsigned k=0;
k<s;
k++)
119 for(
unsigned l=0;l<s;l++) {
136 std::map<Monomial,T> coeff;
137 std::map<Monomial,int> mat;
142 mdebug()<<
"Initial moments:"<<m_input;
146 coeff[m]=it->GetCoeff();
150 int i = 0,
j = 0, l = 0, i2,j2,contneq=0,l2=0,dim2i=0,dim2j=0;
158 std::vector<Monomial> new_mon;
170 if(this->m_init_p==0)
171 this->init_rnd_obj(lm.
size());
173 this->init_idt_obj(lm.
size());
176 std::map<Monomial,int>::const_iterator
idx;
178 mdebug()<<
"after initialize matrix P";
188 m_slvsdp->
coeff(0,i,
j)=coeff[m];
196 new_mon.push_back(m);
201 m_slvsdp->coeff(l,i,
j)=(T)1;
203 m_slvsdp->obj_coeff(l)+=obj_mat(i,
j);
207 m_slvsdp->obj_coeff(l)+=obj_mat(
j,i);
211 mdebug()<<
"l"<<l<<
",i:"<<i<<
",j:"<<
j<<
",value"<<m_slvsdp->coeff(l,i,
j);
218 m_slvsdp->dim()=lm.
size();
225 for(list<Polynomial>::const_iterator itneq=list2.begin();itneq!=list2.end();itneq++)
228 std::cout<<k<<
Degree(*itneq)<<std::endl;
229 dimbloq=(2*k-
Degree(*itneq))/2;
232 std::cout<<
"dimbloq"<<dimbloq<<std::endl;
235 m_slvsdp->dim(contneq)=lm2.
size();
241 mnq=(*itneq)*(*itneq2)*(*jtneq2);
244 if(
Degree(*itmnq)<=m_degree) {
245 m_slvsdp->coeff(0,contneq,i2,j2)+=(itmnq->GetCoeff())*coeff[*itmnq];
250 m_slvsdp->coeff(l2,contneq,i2,j2)=itmnq->GetCoeff();
257 mdebug()<<
"l"<<l2<<
"bloque"<<contneq<<
",i:"<<i2<<
",j:"<<j2<<
",value"<<m_slvsdp->coeff(l2,contneq,i2,j2);
263 std::cout<<
"dim2i"<<dim2i<<std::endl;
264 std::cout<<
"lm2 size"<<lm2.
size()<<std::endl;
271 mdebug()<<
"After hankel matrices construction";
284 for(
unsigned i=0;i<m_slvsdp->obj_size();i++) {
285 new_mon[
i].SetCoeff(m_slvsdp->output[i]);
291 mdebug()<<
"Extended moments:"<<moments;
293 mmx::Decomposer<Polynomial> decomp(moments,this->m_eps_reconstr,this->m_verbose,-1,-1,this->m_s+1,0);
298 weight.resize(decomp.lambdas.size());
299 for(
unsigned i=0;i<decomp.lambdas.size();i++)
300 weight[i] = decomp.lambdasopt[i].real();
305 point.resize(decomp.lambdasopt.size()*this->
dim);
306 for(
unsigned i=0;i<decomp.lambdasopt.size();i++) {
307 for(
unsigned j=0;
j<decomp.linear_forms.nbrow();
j++)
308 point[i*this->
dim+
j]=decomp.linear_forms(
j,i).real();
318 #endif// BORDERBASIX_CUBATURE_HPP
The solversdp_csdp struct The solversdp interface class for csdp.
Definition: solversdp_csdp.h:9
int size() const
Definition: MPoly.hpp:107
Multivariate polynomials.
Definition: MPoly.hpp:28
iterator end()
Definition: MPoly.hpp:102
void set_numneq(int h)
Set the number of equations defining the integration domain.
Definition: cubature.hpp:56
Monom< double, dynamicexp<'x'> > Monomial
Definition: cubature.hpp:26
void set_sdpsolver(solversdp *slv)
Set the SDP solver to be used.
Definition: cubature.hpp:47
cubature()
Definition: cubature.hpp:88
MSKint32t MSKCONST MSKint32t * dim
Definition: mosek.h:2407
void run(int k, list< Polynomial > list2)
Definition: cubature.hpp:134
MSKconetypee MSKrealt MSKint32t MSKint32t j
Definition: mosek.h:2421
Class for computing cubature formula.
Definition: cubature.hpp:24
void set_input(const Polynomial &p)
Set the input sequence of moments.
Definition: cubature.hpp:129
static Polynomial choose(unsigned n, unsigned d)
Definition: matrix_of.hpp:10
void set_degree(int deg)
Set the minimal degree of the cubature.
Definition: cubature.hpp:50
Definition: mdebug.hpp:11
int m_numneq
Definition: cubature.hpp:82
MSKint32t k
Definition: mosek.h:2713
MSKint64t idx
Definition: mosek.h:4022
C coeff
Definition: Monom.hpp:29
int leading_var(const MPoly< R, O > &P)
Definition: MPoly.hpp:423
#define TMPL
Definition: cubature.hpp:13
void obj_def(int i)
Definition: cubature.hpp:37
dynamicexp< X, E >::degree_t Degree(const dynamicexp< X, E > &t)
Definition: dynamicexp.hpp:91
void set_numeq(int g)
Set the number of equations defining the integration domain.
Definition: cubature.hpp:53
void set_verbose(int v)
Definition: cubature.hpp:58
MSKrealt * c
Definition: mosek.h:2678
MPoly< std::vector< Monomial >, Ordering > Polynomial
Definition: cubature.hpp:28
MSKint32t MSKint32t MSKint32t i
Definition: mosek.h:2278
Dlex< Monomial > Ordering
Definition: cubature.hpp:27
std::vector< Monomial >::const_iterator const_iterator
Definition: MPoly.hpp:35
std::vector< T > weight
Definition: cubature.hpp:77
unsigned dim
Definition: cubature.hpp:79
void set_threshold(double eps)
Definition: cubature.hpp:44
int m_degree
Definition: cubature.hpp:80
void SetCoeff(const C &c)
Definition: Monom.hpp:68
Multivariate monomials.
Definition: Monom.hpp:21
iterator begin()
Definition: MPoly.hpp:97
The solversdp struct.
Definition: solversdp.h:26
T & obj_mat(int i, int j)
Coefficient of the objective matrix.
Definition: cubature.hpp:40
int m_numeq
Definition: cubature.hpp:81
std::vector< T > point
Definition: cubature.hpp:78