box_rep< POL > Class Template Reference

Box representation. More...

#include <solver_mv_monomial_box_rep.hpp>

List of all members.

Public Member Functions

Public Attributes


Detailed Description

template<class POL>
class mmx::realroot::box_rep< POL >

Box representation.

Definition at line 40 of file solver_mv_monomial_box_rep.hpp.


Constructor & Destructor Documentation

box_rep (  )  [inline]

Definition at line 88 of file solver_mv_monomial_box_rep.hpp.

Referenced by box_rep< POL >::safe_split(), and box_rep< POL >::subdivide().

00088 {};

box_rep ( Seq< POL > &  sys,
homography_mv< C > &  h 
) [inline]

Definition at line 90 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S, homography_mv< real >::size(), and box_rep< POL >::update_data().

00091     {
00092       hg = h ;
00093       dim= h.size();
00094       S= sys;
00095       
00096       update_data();
00097     };

box_rep ( box_rep< POL >  b,
int  i 
) [inline]

Definition at line 100 of file solver_mv_monomial_box_rep.hpp.

References homography_mv< real >::colapse(), box_rep< POL >::homography(), box_rep< POL >::middle(), box_rep< POL >::nbvar(), box_rep< POL >::S, homography_mv< real >::shift_hom(), and box_rep< POL >::system().

00101         {
00102           dim= b.nbvar();
00103           hg = b.homography();
00104 
00105           hg.shift_hom(b.middle(i) ,i);
00106           hg.colapse();
00107 
00108           S= b.system();          
00109         };

box_rep ( Seq< POL > &  sys,
unsigned  d 
) [inline]

Definition at line 112 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

00113         {
00114             dim=d;
00115             hg  = homography_mv<C>(dim) ;
00116             //hg  = homography_mv<int>(dim) ;
00117             S= sys;        
00118         }

~box_rep (  )  [inline]

Definition at line 121 of file solver_mv_monomial_box_rep.hpp.

00121 {};    


Member Function Documentation

void contract_box ( const C &  t,
const int &  v 
) [inline]

x_v = t*x_v

Definition at line 503 of file solver_mv_monomial_box_rep.hpp.

References homography_mv< real >::contract_hom(), mmx::tensor::contraction(), mmx::rep(), box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::subdivide().

00504     {
00505         unsigned i;
00506         
00507         for (i = 0; i < S.size() ; ++i)
00508             contraction( S[i].rep() , t, v);
00509         
00510         //update homography
00511         hg.contract_hom(t,v);
00512     };

C det ( C **  matrix,
int  order 
) [inline]

Definition at line 203 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::submatrix().

00204     {
00205       if(order == 1)
00206         return **matrix; // Matrix is of order one
00207       
00208       int i;
00209       C ev(0);
00210       for(i = 0; i < order; i++)
00211         ev += (i%2==0?1:-1)* matrix[i][0] * det(submatrix(matrix, order, i, 0), order - 1);
00212       return ev;
00213     }

Seq<Interval<FT> > domain (  )  [inline]

Definition at line 235 of file solver_mv_monomial_box_rep.hpp.

00236     { 
00237       FT l, r;
00238       Seq<Interval<FT> >  s ;
00239       
00240       for ( unsigned i=0; i!=dim; ++i )
00241       {
00242         //lim to 0
00243         if ( hg[i].b!=0 && hg[i].d!=0 )
00244           l= as<FT>(hg[i].b)/as<FT>(hg[i].d);
00245         else if ( hg[i].d==0 )
00246           l= 10000000;
00247         else if ( hg[i].b==0 )
00248           l= 0 ;
00249         else 
00250           l= as<FT>(hg[i].a)/as<FT>(hg[i].c) ;
00251         
00252         //lim to inf
00253         if ( hg[i].a!=0 && hg[i].c!=0 )
00254           r= as<FT>(hg[i].a)/as<FT>(hg[i].c);
00255         else if ( hg[i].c==0 )
00256           r=10000000;
00257         else if ( hg[i].a==0 )
00258           r= 0 ;
00259         else 
00260           r= as<FT>(hg[i].b)/as<FT>(hg[i].d);
00261         
00262         if ( l<=r ) s << Interval<FT>(l,r);
00263         else        s << Interval<FT>(r,l);
00264       }     
00265       return s; 
00266     }

Seq<FT> eval ( Seq< FT >  t  )  [inline]

Definition at line 312 of file solver_mv_monomial_box_rep.hpp.

References assert, mmx::rep(), box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::exclude1(), box_rep< POL >::include1(), box_rep< POL >::include2(), box_rep< POL >::include3(), box_rep< POL >::is_root(), and box_rep< POL >::signof().

00313     {
00314       assert( t.size()==dim );
00315       Seq<FT> res;
00316       FT ev;
00317       for ( unsigned i=0; i!=S.size() ; ++i )
00318       {
00319         tensor::eval( ev , S[i].rep(), t, dim );
00320         res<< ev;
00321       }
00322       return res;
00323     }

bool exclude1 ( Seq< POL * > &  S0  )  [inline]

Exclusion criteria (inteval arithmetic).

Definition at line 641 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval(), Interval< T, r >::M, Interval< T, r >::m, box_rep< POL >::nbpol(), and mmx::rep().

00642     {
00643       Interval<FT> ev;
00644       Seq<Interval<FT> > dom;
00645       dom= domain<FT>();
00646       
00647       for (unsigned i=0; i!=nbpol(); ++i)
00648       {
00649         tensor::eval( ev , S0[i]->rep(), 
00650                       dom , dim );      
00651         if ( ev.m*ev.M > 0 )
00652         {   
00653           //   std::cout<<i<<" ev"<< 
00654           //    dom<<"\nf= "<< *(S0[1])<<
00655           //   "\n f([])= " <<ev<<std::endl;
00656           //  if (td!=0)
00657           // std::cout<<"!!!!!!----td: "<<td <<std::endl;
00658           return true;
00659         }       
00660         
00661       }
00662       return false;
00663     };

homography_mv<C> hom (  )  [inline]

Definition at line 231 of file solver_mv_monomial_box_rep.hpp.

00231 { return hg; }

homography_mv<C> homography (  )  [inline]

Definition at line 151 of file solver_mv_monomial_box_rep.hpp.

Referenced by box_rep< POL >::box_rep().

00151 { return this->hg; }

bool include1 ( polynomial< double, with< MonomialTensor > > *  J  )  [inline]

Inclusion criteria (Miranda Test).

Definition at line 554 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval(), Interval< T, r >::M, Interval< T, r >::m, box_rep< POL >::miranda_test(), and POL.

00555         {
00556             Interval<double> ev;
00557             unsigned i,j,c;
00558             POL u,l;
00559 
00560             bool t[dim][dim];
00561 
00562             tensor::eval( ev , J->rep() , 
00563             this->template domain<double>() , dim );
00564             if ( ev.m*ev.M < 0 ) 
00565                 return false;
00566 
00567             for (i=0; i!=dim;++i)
00568                 for (j=0; j!=dim;++j)
00569                     t[i][j]= miranda_test(i,j);
00570 
00571             c=0;
00572             for (i=0; i!=dim;++i)
00573                 for (j=0; j!=dim;++j)
00574                     if (t[i][j]==true) 
00575                     {   
00576                         c++; break;
00577                     }
00578             if (c<dim) return false;
00579 
00580             c=0;
00581             for (i=0; i!=dim;++i)
00582                 for (j=0; j!=dim;++j)
00583                     if (t[j][i]==true) 
00584                     {   
00585                         c++; break;
00586                     }
00587             if (c<dim) return false;
00588 
00589 //          std::cout<<"INCLUDE. ev="<<ev<<", c="<<c <<std::endl;
00590 
00591             return true;
00592         };

bool include2 ( polynomial< double, with< MonomialTensor > > *  J  )  [inline]

Inclusion criteria (Jacobian+Topological Degree).

Definition at line 595 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval(), Interval< T, r >::M, and Interval< T, r >::m.

00596         {
00597           Interval<double> ev;
00598           
00599           tensor::eval( ev , J->rep() , 
00600                         this->domain<double>(), dim );
00601 
00602 //            if ( this->width<double>() > 0.001 )
00603               if ( ev.m*ev.M < 0 ) 
00604                 return false;
00605 
00606               //td= this->topological_degree_2d<double>();
00607             //if ( (td==-1 || td==1) )
00608             //{ std::cout<<"INCLUDE. ev="<<ev<<", td="<<td <<std::endl;
00609             //this->print();  }
00610 
00611             return ( 0 );
00612         }

bool include3 ( polynomial< double, with< MonomialTensor > > *  J  )  [inline]

Inclusion criteria based on Rump's test.

Definition at line 615 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval(), Interval< T, r >::M, and Interval< T, r >::m.

00616         {
00617           //evaluate df_i(B) of the box = M_i
00618           // check if -Ji(c)*f(c) + (I-Ji(c)*M)*B
00619           // is contaied in B.
00620 
00621           Interval<double> ev;
00622           
00623           tensor::eval( ev , J->rep() , 
00624                         this->domain<double>(), dim );
00625 
00626 //            if ( this->width<double>() > 0.001 )
00627               if ( ev.m*ev.M < 0 ) 
00628                 return false;
00629 
00630               //td= this->topological_degree_2d<double>();
00631             //if ( (td==-1 || td==1) )
00632             //{ std::cout<<"INCLUDE. ev="<<ev<<", td="<<td <<std::endl;
00633             //this->print();  }
00634 
00635             return ( 0 );
00636         }

bool is_root ( Seq< C >  t  )  [inline]

Definition at line 326 of file solver_mv_monomial_box_rep.hpp.

References assert, box_rep< POL >::eval(), mmx::rep(), box_rep< POL >::S, and Seq< C, R >::size().

00327     {
00328       assert( t.size()==dim );
00329       C ev;
00330       for ( unsigned i=0; i!=S.size() ; ++i )
00331       {
00332         tensor::eval( ev , S[i].rep() , t , dim );
00333         if ( ev != 0 ) 
00334           return false;
00335       }
00336       return true;
00337     }

C l_bound ( const int  v  )  [inline]

Lower integer bound for v-th coords of the positive roots.

Definition at line 365 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::maxs(), box_rep< POL >::mins(), POL, box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::reduce_domain().

00366     {
00367       C l(0) ;
00368       unsigned i;
00369       POL m0, m1 ;
00370       
00371       for (i=0; i!=S.size(); ++i )  // for all polys
00372       {
00373         m1= maxs( & S[i] , v);
00374         m0= mins( & S[i] , v);
00375         //std::cout<< m1<< " , "<< m0 << std::endl;
00376         
00377         if ( m0( C(0) ) > 0 ) 
00378           l= solver<ring<C,MonomialTensor>, CFfirstFloor>::template solve<C>(m0);
00379 //                l= as<C>( solver<ring<double,Bernstein>, Bspline>::first_root(m0) );
00380         else if ( m1( C(0) ) < 0 ) 
00381           l= solver<ring<C,MonomialTensor>, CFfirstFloor>::template solve<C>(m1);
00382 //                l= as<C>( solver<ring<double,Bernstein>, Bspline>::first_root(m1) );
00383       }
00384       return l;
00385     };

POL lface ( const int &  i,
const int &  v 
) [inline]

Definition at line 693 of file solver_mv_monomial_box_rep.hpp.

References mmx::tensor::face(), POL, mmx::tensor::rename_var(), and box_rep< POL >::S.

00694         {
00695             POL t;
00696 
00697             tensor::face(t, S[i],  v , 0 );
00698             rename_var( t.rep() , 1-v, 0 ) ; //1-v works for 2D only
00699 
00700             return t;
00701         };

POL maxs ( POL *  f,
int  v 
) [inline]

Definition at line 396 of file solver_mv_monomial_box_rep.hpp.

References POL.

Referenced by box_rep< POL >::l_bound().

00397     {
00398         POL h(0,f->rep().szs()[v]-1,0) ;//var is always x0
00399         tensor::maxs(h.rep(), f->rep(), v );
00400         return h;
00401     };

C middle ( int  i  )  [inline]

Definition at line 276 of file solver_mv_monomial_box_rep.hpp.

References floor().

00277     {
00278       C t;
00279       t= as<C>( floor( as<double>(hg[i].d/hg[i].c) )); //floor
00280       //if ( t==C(0) ) t=t+1;
00281       return (t+1); 
00282     }

Seq<C> middle (  )  [inline]

Definition at line 268 of file solver_mv_monomial_box_rep.hpp.

References floor().

Referenced by box_rep< POL >::box_rep(), box_rep< POL >::subdiv_center(), and box_rep< POL >::update_data().

00269     {
00270       Seq<C> m;
00271       for ( unsigned i=0; i!=dim; ++i )
00272         m <<  as<C>( floor( as<double>(hg[i].d/hg[i].c) )) ; //floor
00273       return (m);
00274     }

POL mins ( POL *  f,
int  v 
) [inline]

Definition at line 388 of file solver_mv_monomial_box_rep.hpp.

References POL.

Referenced by box_rep< POL >::l_bound().

00389     {
00390         POL h(0,f->rep().szs()[v]-1,0) ;//var is always x0
00391         tensor::mins(h.rep(), f->rep(), v );
00392         return h;
00393     };

bool miranda_test ( const int  i,
const int  j 
) [inline]

Definition at line 539 of file solver_mv_monomial_box_rep.hpp.

References mmx::tensor::face(), mmx::realroot::no_variation(), POL, and box_rep< POL >::S.

Referenced by box_rep< POL >::include1().

00540         {
00541             POL u,l;
00542 
00543             tensor::face(l, S[i], j, 0);
00544             tensor::face(u, S[i], j, 1);
00545 
00546             return  ( no_variation(l)    && 
00547                       no_variation(u)    &&
00548                       (l[0]>0)!=(u[0]>0) );
00549         };

unsigned nbpol (  )  [inline]

Definition at line 154 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::exclude1().

00154 { return S.size(); }

unsigned nbvar (  )  [inline]

Definition at line 153 of file solver_mv_monomial_box_rep.hpp.

Referenced by box_rep< POL >::box_rep().

00153 { return dim; }

Seq<FT> point ( Seq< FT >  t  )  [inline]

Definition at line 286 of file solver_mv_monomial_box_rep.hpp.

References assert, and Seq< C, R >::size().

Referenced by box_rep< POL >::update_data().

00287     {
00288       assert( t.size()==dim );
00289       Seq<FT> m;
00290       for ( unsigned i=0; i!=dim; ++i )
00291         m <<  ( as<FT>(hg[i].a)*(t[i]) + as<FT>(hg[i].b) ) / 
00292           ( as<FT>(hg[i].c)*(t[i]) + as<FT>(hg[i].d) ) ;
00293       return m;
00294     }

void print (  )  [inline]

Definition at line 712 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::system().

00713         {
00714             std::cout << "-------------Box---------------"    << "\n" ;
00715             std::cout << system() << "\n";
00716             for (unsigned i=0; i!=dim;++i)
00717                 std::cout<< "("<<hg[i].a <<"x + " << hg[i].b<<")/("<<hg[i].c<<"x+ "<<hg[i].d << ")"<<std::endl; ;
00718             //std::cout<<"td="<<tdeg()<<std::endl;
00719 //      std::cout << this->template domain<QQ>()<<"\n" ;
00720         std::cout << this->template domain<double>()<<"\n" ;
00721         std::cout << "-------------------------------"   << "\n" ;
00722         };

bool reduce_domain (  )  [inline]

Reduce the domain from below using integer lower bound.

Definition at line 341 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::l_bound(), box_rep< POL >::shift_box(), and box_rep< POL >::update_data().

00342     {
00343       C lb;
00344       unsigned i;
00345       bool flag= false; // true iff reduction takes place
00346       
00347       Seq<C> track;
00348       
00349       //Compute lower bound and shift system
00350       for ( i=0; i<dim ;++i)  // for all vars
00351       {
00352         lb= l_bound(i);
00353         track<< lb;
00354         if ( lb!=0 ) 
00355         {
00356           this->shift_box(lb,i);
00357           update_data();
00358           flag= true;
00359         }
00360       }
00361       return flag;
00362     };

void restrict ( Seq< Interval< C > > &  dom0  )  [inline]

Definition at line 123 of file solver_mv_monomial_box_rep.hpp.

References homography_mv< real >::contract_hom(), mmx::tensor::contraction(), mmx::reciprocal(), homography_mv< real >::reciprocal_hom(), mmx::rep(), box_rep< POL >::S, mmx::shift(), homography_mv< real >::shift_hom(), Seq< C, R >::size(), box_rep< POL >::update_data(), and box_rep< POL >::width().

00124         {
00125           //Seq<Interval<int> > dom;
00126           //let::assign(dom,dom0);
00127 
00128             unsigned i,j;
00129             
00130             for (i=0; i!=dim; i++)
00131             {
00132                 hg.shift_hom     ( dom0[i].m      , i );
00133                 hg.contract_hom  ( dom0[i].width(), i );
00134                 hg.reciprocal_hom( 1             , i );
00135                 hg.shift_hom     ( 1             , i );
00136                 hg.reciprocal_hom( 1             , i );//mirror again
00137                 for (j=0; j!=S.size(); j++)
00138                 {
00139                     shift      ( S[j].rep(), dom0[i].m      , i);
00140                     contraction( S[j].rep(), dom0[i].width(), i);
00141                     reciprocal ( S[j].rep(),                 i);
00142                     shift      ( S[j].rep(), C(1),           i);
00143                     reciprocal ( S[j].rep(),                 i);//mirror again
00144                 }
00145             }
00146             update_data();
00147 }

void reverse_and_shift_box ( const int &  v  )  [inline]

Definition at line 525 of file solver_mv_monomial_box_rep.hpp.

References mmx::reciprocal(), homography_mv< real >::reciprocal_hom(), mmx::rep(), box_rep< POL >::S, mmx::shift(), homography_mv< real >::shift_hom(), and Seq< C, R >::size().

Referenced by box_rep< POL >::subdivide().

00526         {
00527             for (unsigned i = 0; i < S.size() ; ++i) //for all polys
00528             {
00529                 reciprocal( S[i].rep() ,   v);
00530                 shift     ( S[i].rep() ,C(1), v);
00531             }
00532             
00533             //update homography
00534             hg.reciprocal_hom(1,v);
00535             hg.shift_hom     (1,v);
00536         };

void reverse_box ( const int &  v  )  [inline]

Definition at line 515 of file solver_mv_monomial_box_rep.hpp.

References mmx::reciprocal(), homography_mv< real >::reciprocal_hom(), mmx::rep(), box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::subdivide().

00516         {
00517           for (unsigned i = 0; i < S.size() ; ++i) //for all polys
00518             reciprocal( S[i].rep() ,   v);
00519         
00520         //update homography
00521         hg.reciprocal_hom(1,v);
00522         };

POL rface ( const int &  i,
const int &  v 
) [inline]

Definition at line 703 of file solver_mv_monomial_box_rep.hpp.

References mmx::tensor::face(), POL, mmx::tensor::rename_var(), and box_rep< POL >::S.

00704         {
00705             POL tmp;
00706             tensor::face(tmp, S[i],  v , 1 );
00707             rename_var( tmp.rep() , 1-v, 0 ) ; //1-v works for 2D only
00708 
00709             return tmp;
00710         };

void safe_split ( const int &  v,
m = C(1) 
) [inline]

Subdivide in direction v only.

Definition at line 436 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::box_rep().

00437     {
00438       box_rep * b;
00439 
00440       b = new box_rep( *this ) ;
00441 
00442       // evaluate polys at x_v=m
00443 
00444       //check sign
00445     };

void shift_box ( const C &  t,
const int &  v = 0 
) [inline]

Shift the system by t in direction v.

Definition at line 491 of file solver_mv_monomial_box_rep.hpp.

References mmx::rep(), box_rep< POL >::S, mmx::shift(), homography_mv< real >::shift_hom(), and Seq< C, R >::size().

Referenced by box_rep< POL >::reduce_domain(), and box_rep< POL >::subdivide().

00492         {
00493             unsigned i;
00494             
00495             for (i = 0; i < S.size() ; ++i) //for all polys do x=x+1
00496                 shift( S[i].rep() , t, v);
00497             
00498             //update homography
00499             hg.shift_hom(t,v);
00500         };

int signof ( polynomial< double, with< MonomialTensor > > *  p  )  [inline]

Definition at line 216 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval().

00217     {
00218       
00219       Interval<double> ev;
00220       //int dim= p->nbvar();
00221       
00222       tensor::eval( ev , p->rep() , 
00223       this->template domain<double>() , dim );
00224       
00225       if (ev< .1e-15) return (0);
00226       return (ev>0?1:-1);
00227     }

Seq<C> subdiv_center ( const unsigned &  i  )  [inline]

Definition at line 296 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::middle(), and Seq< C, R >::resize().

Referenced by box_rep< POL >::subdiv_point().

00297     {
00298       Seq<C> tt;
00299       // Seq<double> t;
00300       tt.resize( dim );
00301       tt[i]= this->middle(i);
00302       
00303       return tt;
00304     }

Seq<double> subdiv_point ( const unsigned &  i  )  [inline]

Definition at line 306 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::subdiv_center().

00307     {
00308       return  this->template point<double>(this->subdiv_center(i));
00309     }

void subdivide ( const int &  v,
C &  m,
STACK &  stck 
) [inline]

Subdivide in direction v and at point x_v=m.

Definition at line 470 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::box_rep(), box_rep< POL >::contract_box(), box_rep< POL >::reverse_and_shift_box(), box_rep< POL >::reverse_box(), box_rep< POL >::shift_box(), and box_rep< POL >::update_data().

00471         {
00472             box_rep * b;
00473             box_rep tmp(*this);
00474         
00475             // left box
00476             b = new box_rep( tmp ) ;
00477             b->contract_box( m ,v);
00478             b->reverse_and_shift_box(v);
00479             b->reverse_box( v); //mirror back
00480             b->update_data();           
00481             stck.push ( b );
00482 
00483             // right box
00484             b = new box_rep( tmp ) ;
00485             b->shift_box( m, v);
00486             b->update_data();           
00487             stck.push ( b );
00488         };

void subdivide ( const int &  v,
STACK &  stck,
m = C(1) 
) [inline]

Subdivide in direction v only.

Definition at line 450 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::box_rep(), box_rep< POL >::contract_box(), box_rep< POL >::reverse_and_shift_box(), box_rep< POL >::shift_box(), and box_rep< POL >::update_data().

00451         {
00452             box_rep * b;
00453         
00454             // right box
00455             b = new box_rep( *this ) ;
00456             b->shift_box( m ,v);
00457             b->update_data();           
00458             stck.push ( b );
00459 
00460             // left box
00461             b = new box_rep( *this ) ;
00462             b->contract_box(m,v);
00463             b->reverse_and_shift_box(v);
00464             //b->reverse_box( v); // produces thin boxes
00465             b->update_data();           
00466             stck.push ( b );
00467         };

void subdivide ( STACK &  stck  )  [inline]

Subdivide in all directions.

Definition at line 405 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::box_rep(), box_rep< POL >::reverse_and_shift_box(), box_rep< POL >::shift_box(), and box_rep< POL >::update_data().

00406     {
00407         int i;
00408         Seq<int> ind(dim);
00409         box_rep * b;
00410 
00411         for (;;) 
00412         {
00413             // copy box
00414             b = new box_rep( *this ) ;
00415                 
00416             // transform box
00417             for (i = 0; i < dim ; ++i)  // for all vars
00418                 if ( ind[i] )
00419                     b->shift_box(1,i);
00420                 else
00421                     b->reverse_and_shift_box(i);
00422             b->update_data();           
00423 
00424             // push box in stack
00425             stck.push ( b );
00426 
00427             // next 
00428             for (i = 0; i < dim ; ++i) 
00429                 if (++ind[i] <2 ) break; else ind[i]=0 ;
00430             if (i == dim ) break;
00431         }
00432     };

int** submatrix ( C **  matrix,
int  order,
int  i,
int  j 
) [inline]

Definition at line 178 of file solver_mv_monomial_box_rep.hpp.

Referenced by box_rep< POL >::det().

00179     {
00180       
00181       C **subm;
00182       int p, q;         // Indexes for matrix
00183       int a = 0, b;     // Indexes for subm
00184       subm = new int* [order - 1];
00185       
00186       for(p = 0; p < order; p++) {
00187         if(p==i) continue;      //Skip ith row
00188         subm[a] = new C[order - 1];
00189         
00190         b = 0;
00191         
00192         for(q = 0; q< order; q++) {
00193           if(q==j) continue;    //Skip jth column
00194           subm[a][b++] = matrix[p][q];
00195         }
00196         a++; //Increment row index
00197       }
00198       return subm;
00199     }

POL system ( const int  i  )  [inline]

Definition at line 232 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

00232 { return S[i]; }

POL system ( unsigned  i  )  [inline]

Definition at line 152 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

00152 { return S[i]; }

Seq<POL> system (  )  [inline]

Accessors.

Definition at line 150 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

Referenced by box_rep< POL >::box_rep(), and box_rep< POL >::print().

00150 { return S; }

void update_data (  )  [inline]

Definition at line 57 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::middle(), box_rep< POL >::point(), box_rep< POL >::S, and Seq< C, R >::size().

Referenced by box_rep< POL >::box_rep(), box_rep< POL >::reduce_domain(), box_rep< POL >::restrict(), and box_rep< POL >::subdivide().

00058     {
00059 
00060       //C t;
00061       
00062       // scale coefficients
00063 #ifdef DIVISION
00064        for( unsigned i=0; i<S.size(); i++ ){
00065           t= *std::max_element( (S[i]).begin(), (S[i]).end() );
00066           S[i]= S[i]/t;
00067         }
00068 #endif
00069 
00070       // Precondition
00071       Seq<double> c= this->point( this->middle() ) ;
00072       //double *fc, *jc, *ijc;
00073       Seq<POL> S1= S;
00074 
00075       // DPOL * J= jacobian(S1);
00076 
00077       // jc= eval_poly_matrix( c, J, dim);   // Jacobian evaluated on c
00078       // ijc= new double[dim*dim];
00079       // linear::LUinverse(ijc, jc, dim);
00080 
00081       // for( unsigned i=0; i<dim; i++ ){
00082       //   S[i]=0;
00083       //   for( unsigned j=0; j<dim; j++ )
00084       //     S[i] +=  ijc[i*dim+j] * S1[j] ;
00085       // }
00086     }

FT volume (  )  [inline]

Definition at line 157 of file solver_mv_monomial_box_rep.hpp.

References Seq< C, R >::size(), and box_rep< POL >::width().

00158     {
00159       Seq<Interval<FT> > s;
00160       FT v(1);
00161       
00162       s= domain<FT>();
00163       
00164       for (unsigned i=0; i!=s.size(); i++ )
00165         v *= s[i].width();
00166       
00167       return v;
00168     }

FT width ( unsigned &  t  )  [inline]

The width, corresponding max projection returned in t.

Definition at line 677 of file solver_mv_monomial_box_rep.hpp.

References Seq< C, R >::size(), and box_rep< POL >::width().

00678         {
00679             unsigned i;
00680             FT w;
00681             Seq<Interval<FT> >  s ;
00682 
00683             s= domain<FT>();
00684             w= s[0].width(); t= 0;
00685 
00686             for ( i=0; i!=s.size(); ++i )
00687                 if ( s[i].width() > w) 
00688                 { w=s[i].width() ; t=i; }
00689 
00690             return w;
00691         };

FT width (  )  [inline]

The width of the box (max of projection widths).

Definition at line 667 of file solver_mv_monomial_box_rep.hpp.

Referenced by box_rep< POL >::restrict(), box_rep< POL >::volume(), and box_rep< POL >::width().

00668         {
00669             unsigned i;
00670             FT m=this->width<FT>(i);
00671             
00672             return m;
00673         };


Member Data Documentation

Seq<POL> S

The documentation for this class was generated from the following file:

Generated on 6 Dec 2012 for realroot by  doxygen 1.6.1