realroot_doc 0.1.1
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 41 of file solver_mv_monomial_box_rep.hpp.


Constructor & Destructor Documentation

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

Definition at line 91 of file solver_mv_monomial_box_rep.hpp.

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

    {
      hg = h ;
      dim= h.size();
      S= sys;
      
      update_data();
    };
box_rep ( box_rep< POL >  b,
int  i 
) [inline]

Definition at line 101 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().

        {
          dim= b.nbvar();
          hg = b.homography();

          hg.shift_hom(b.middle(i) ,i);
          hg.colapse();

          S= b.system();          
        };
box_rep ( Seq< POL > &  sys,
unsigned  d 
) [inline]

Definition at line 113 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

        {
            dim=d;
            hg  = homography_mv<C>(dim) ;
            //hg  = homography_mv<int>(dim) ;
            S= sys;        
        }
~box_rep ( ) [inline]

Definition at line 122 of file solver_mv_monomial_box_rep.hpp.

{};    

Member Function Documentation

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

x_v = t*x_v

Definition at line 504 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().

    {
        unsigned i;
        
        for (i = 0; i < S.size() ; ++i)
            contraction( S[i].rep() , t, v);
        
        //update homography
        hg.contract_hom(t,v);
    };
C det ( C **  matrix,
int  order 
) [inline]

Definition at line 204 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::submatrix().

    {
      if(order == 1)
        return **matrix; // Matrix is of order one
      
      int i;
      C ev(0);
      for(i = 0; i < order; i++)
        ev += (i%2==0?1:-1)* matrix[i][0] * det(submatrix(matrix, order, i, 0), order - 1);
      return ev;
    }
Seq<Interval<FT> > domain ( ) [inline]

Definition at line 236 of file solver_mv_monomial_box_rep.hpp.

    { 
      FT l, r;
      Seq<Interval<FT> >  s ;
      
      for ( unsigned i=0; i!=dim; ++i )
      {
        //lim to 0
        if ( hg[i].b!=0 && hg[i].d!=0 )
          l= as<FT>(hg[i].b)/as<FT>(hg[i].d);
        else if ( hg[i].d==0 )
          l= 10000000;
        else if ( hg[i].b==0 )
          l= 0 ;
        else 
          l= as<FT>(hg[i].a)/as<FT>(hg[i].c) ;
        
        //lim to inf
        if ( hg[i].a!=0 && hg[i].c!=0 )
          r= as<FT>(hg[i].a)/as<FT>(hg[i].c);
        else if ( hg[i].c==0 )
          r=10000000;
        else if ( hg[i].a==0 )
          r= 0 ;
        else 
          r= as<FT>(hg[i].b)/as<FT>(hg[i].d);
        
        if ( l<=r ) s << Interval<FT>(l,r);
        else        s << Interval<FT>(r,l);
      }     
      return s; 
    }
Seq<FT> eval ( Seq< FT >  t) [inline]

Definition at line 313 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().

    {
      assert( t.size()==dim );
      Seq<FT> res;
      FT ev;
      for ( unsigned i=0; i!=S.size() ; ++i )
      {
        tensor::eval( ev , S[i].rep(), t, dim );
        res<< ev;
      }
      return res;
    }
bool exclude1 ( Seq< POL * > &  S0) [inline]

Exclusion criteria (inteval arithmetic)

Definition at line 642 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().

    {
      Interval<FT> ev;
      Seq<Interval<FT> > dom;
      dom= domain<FT>();
      
      for (unsigned i=0; i!=nbpol(); ++i)
      {
        tensor::eval( ev , S0[i]->rep(), 
                      dom , dim );      
        if ( ev.m*ev.M > 0 )
        {   
          //   std::cout<<i<<" ev"<< 
          //    dom<<"\nf= "<< *(S0[1])<<
          //   "\n f([])= " <<ev<<std::endl;
          //  if (td!=0)
          // std::cout<<"!!!!!!----td: "<<td <<std::endl;
          return true;
        }       
        
      }
      return false;
    };
homography_mv<C> hom ( ) [inline]

Definition at line 232 of file solver_mv_monomial_box_rep.hpp.

{ return hg; }
homography_mv<C> homography ( ) [inline]

Definition at line 152 of file solver_mv_monomial_box_rep.hpp.

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

{ return this->hg; }
bool include1 ( polynomial< double, with< MonomialTensor > > *  J) [inline]

Inclusion criteria (Miranda Test)

Definition at line 555 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.

        {
            Interval<double> ev;
            unsigned i,j,c,r ;
            POL u,l;

            bool t[dim][dim];

            tensor::eval( ev , J->rep() , 
            this->template domain<double>() , dim );
            if ( ev.m*ev.M < 0 ) 
                return false;

            for (i=0; i!=dim;++i)
                for (j=0; j!=dim;++j)
                    t[i][j]= miranda_test(i,j);

            c=0;
            for (i=0; i!=dim;++i)
                for (j=0; j!=dim;++j)
                    if (t[i][j]==true) 
                    {   
                        c++; break;
                    }
            if (c<dim) return false;

            c=0;
            for (i=0; i!=dim;++i)
                for (j=0; j!=dim;++j)
                    if (t[j][i]==true) 
                    {   
                        c++; break;
                    }
            if (c<dim) return false;

//          std::cout<<"INCLUDE. ev="<<ev<<", c="<<c <<std::endl;

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

Inclusion criteria (Jacobian+Topological Degree)

Definition at line 596 of file solver_mv_monomial_box_rep.hpp.

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

        {
          Interval<double> ev;
          
          tensor::eval( ev , J->rep() , 
                        this->domain<double>(), dim );

//            if ( this->width<double>() > 0.001 )
              if ( ev.m*ev.M < 0 ) 
                return false;

              //td= this->topological_degree_2d<double>();
            //if ( (td==-1 || td==1) )
            //{ std::cout<<"INCLUDE. ev="<<ev<<", td="<<td <<std::endl;
            //this->print();  }

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

Inclusion criteria based on Rump's test.

Definition at line 616 of file solver_mv_monomial_box_rep.hpp.

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

        {
          //evaluate df_i(B) of the box = M_i
          // check if -Ji(c)*f(c) + (I-Ji(c)*M)*B
          // is contaied in B.

          Interval<double> ev;
          
          tensor::eval( ev , J->rep() , 
                        this->domain<double>(), dim );

//            if ( this->width<double>() > 0.001 )
              if ( ev.m*ev.M < 0 ) 
                return false;

              //td= this->topological_degree_2d<double>();
            //if ( (td==-1 || td==1) )
            //{ std::cout<<"INCLUDE. ev="<<ev<<", td="<<td <<std::endl;
            //this->print();  }

            return ( 0 );
        }
bool is_root ( Seq< C >  t) [inline]

Definition at line 327 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().

    {
      assert( t.size()==dim );
      C ev;
      for ( unsigned i=0; i!=S.size() ; ++i )
      {
        tensor::eval( ev , S[i].rep() , t , dim );
        if ( ev != 0 ) 
          return false;
      }
      return true;
    }
C l_bound ( const int  v) [inline]

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

Definition at line 366 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().

    {
      C l(0) ;
      unsigned i;
      POL m0, m1 ;
      
      for (i=0; i!=S.size(); ++i )  // for all polys
      {
        m1= maxs( & S[i] , v);
        m0= mins( & S[i] , v);
        //std::cout<< m1<< " , "<< m0 << std::endl;
        
        if ( m0( C(0) ) > 0 ) 
          l= solver<ring<C,MonomialTensor>, CFfirstFloor>::template solve<C>(m0);
//                l= as<C>( solver<ring<double,Bernstein>, Bspline>::first_root(m0) );
        else if ( m1( C(0) ) < 0 ) 
          l= solver<ring<C,MonomialTensor>, CFfirstFloor>::template solve<C>(m1);
//                l= as<C>( solver<ring<double,Bernstein>, Bspline>::first_root(m1) );
      }
      return l;
    };
POL lface ( const int &  i,
const int &  v 
) [inline]

Definition at line 694 of file solver_mv_monomial_box_rep.hpp.

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

        {
            POL t;

            tensor::face(t, S[i],  v , 0 );
            rename_var( t.rep() , 1-v, 0 ) ; //1-v works for 2D only

            return t;
        };
POL maxs ( POL *  f,
int  v 
) [inline]

Definition at line 397 of file solver_mv_monomial_box_rep.hpp.

References POL.

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

    {
        POL h(0,f->rep().szs()[v]-1,0) ;//var is always x0
        tensor::maxs(h.rep(), f->rep(), v );
        return h;
    };
Seq<C> middle ( ) [inline]

Definition at line 269 of file solver_mv_monomial_box_rep.hpp.

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

    {
      Seq<C> m;
      for ( unsigned i=0; i!=dim; ++i )
        m <<  as<C>( floor( as<double>(hg[i].d/hg[i].c) )) ; //floor
      return (m);
    }
C middle ( int  i) [inline]

Definition at line 277 of file solver_mv_monomial_box_rep.hpp.

    {
      C t;
      t= as<C>( floor( as<double>(hg[i].d/hg[i].c) )); //floor
      //if ( t==C(0) ) t=t+1;
      return (t+1); 
    }
POL mins ( POL *  f,
int  v 
) [inline]

Definition at line 389 of file solver_mv_monomial_box_rep.hpp.

References POL.

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

    {
        POL h(0,f->rep().szs()[v]-1,0) ;//var is always x0
        tensor::mins(h.rep(), f->rep(), v );
        return h;
    };
bool miranda_test ( const int  i,
const int  j 
) [inline]

Definition at line 540 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().

        {
            POL u,l;

            tensor::face(l, S[i], j, 0);
            tensor::face(u, S[i], j, 1);

            return  ( no_variation(l)    && 
                      no_variation(u)    &&
                      (l[0]>0)!=(u[0]>0) );
        };
unsigned nbpol ( ) [inline]

Definition at line 155 of file solver_mv_monomial_box_rep.hpp.

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

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

{ return S.size(); }
unsigned nbvar ( ) [inline]

Definition at line 154 of file solver_mv_monomial_box_rep.hpp.

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

{ return dim; }
Seq<FT> point ( Seq< FT >  t) [inline]

Definition at line 287 of file solver_mv_monomial_box_rep.hpp.

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

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

    {
      assert( t.size()==dim );
      Seq<FT> m;
      for ( unsigned i=0; i!=dim; ++i )
        m <<  ( as<FT>(hg[i].a)*(t[i]) + as<FT>(hg[i].b) ) / 
          ( as<FT>(hg[i].c)*(t[i]) + as<FT>(hg[i].d) ) ;
      return m;
    }
void print ( ) [inline]

Definition at line 713 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::system().

        {
            std::cout << "-------------Box---------------"    << "\n" ;
            std::cout << system() << "\n";
            for (unsigned i=0; i!=dim;++i)
                std::cout<< "("<<hg[i].a <<"x + " << hg[i].b<<")/("<<hg[i].c<<"x+ "<<hg[i].d << ")"<<std::endl; ;
            //std::cout<<"td="<<tdeg()<<std::endl;
//      std::cout << this->template domain<QQ>()<<"\n" ;
        std::cout << this->template domain<double>()<<"\n" ;
        std::cout << "-------------------------------"   << "\n" ;
        };
bool reduce_domain ( ) [inline]

Reduce the domain from below using integer lower bound.

Definition at line 342 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().

    {
      C lb;
      unsigned i;
      bool flag= false; // true iff reduction takes place
      
      Seq<C> track;
      
      //Compute lower bound and shift system
      for ( i=0; i<dim ;++i)  // for all vars
      {
        lb= l_bound(i);
        track<< lb;
        if ( lb!=0 ) 
        {
          this->shift_box(lb,i);
          update_data();
          flag= true;
        }
      }
      return flag;
    };
void restrict ( Seq< Interval< C > > &  dom0) [inline]

Definition at line 124 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().

        {
          //Seq<Interval<int> > dom;
          //let::assign(dom,dom0);

            unsigned i,j;
            
            for (i=0; i!=dim; i++)
            {
                hg.shift_hom     ( dom0[i].m      , i );
                hg.contract_hom  ( dom0[i].width(), i );
                hg.reciprocal_hom( 1             , i );
                hg.shift_hom     ( 1             , i );
                hg.reciprocal_hom( 1             , i );//mirror again
                for (j=0; j!=S.size(); j++)
                {
                    shift      ( S[j].rep(), dom0[i].m      , i);
                    contraction( S[j].rep(), dom0[i].width(), i);
                    reciprocal ( S[j].rep(),                 i);
                    shift      ( S[j].rep(), C(1),           i);
                    reciprocal ( S[j].rep(),                 i);//mirror again
                }
            }
            update_data();
}
void reverse_and_shift_box ( const int &  v) [inline]

Definition at line 526 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().

        {
            for (unsigned i = 0; i < S.size() ; ++i) //for all polys
            {
                reciprocal( S[i].rep() ,   v);
                shift     ( S[i].rep() ,C(1), v);
            }
            
            //update homography
            hg.reciprocal_hom(1,v);
            hg.shift_hom     (1,v);
        };
void reverse_box ( const int &  v) [inline]

Definition at line 516 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().

        {
          for (unsigned i = 0; i < S.size() ; ++i) //for all polys
            reciprocal( S[i].rep() ,   v);
        
        //update homography
        hg.reciprocal_hom(1,v);
        };
POL rface ( const int &  i,
const int &  v 
) [inline]

Definition at line 704 of file solver_mv_monomial_box_rep.hpp.

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

        {
            POL tmp;
            tensor::face(tmp, S[i],  v , 1 );
            rename_var( tmp.rep() , 1-v, 0 ) ; //1-v works for 2D only

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

Subdivide in direction v only.

Definition at line 437 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::box_rep().

    {
      box_rep * b;

      b = new box_rep( *this ) ;

      // evaluate polys at x_v=m

      //check sign
    };
void shift_box ( const C &  t,
const int &  v = 0 
) [inline]

Shift the system by t in direction v.

Definition at line 492 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().

        {
            unsigned i;
            
            for (i = 0; i < S.size() ; ++i) //for all polys do x=x+1
                shift( S[i].rep() , t, v);
            
            //update homography
            hg.shift_hom(t,v);
        };
int signof ( polynomial< double, with< MonomialTensor > > *  p) [inline]

Definition at line 217 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::eval().

    {
      
      Interval<double> ev;
      //int dim= p->nbvar();
      
      tensor::eval( ev , p->rep() , 
      this->template domain<double>() , dim );
      
      if (ev< .1e-15) return (0);
      return (ev>0?1:-1);
    }
int signof_det ( polynomial< double, with< MonomialTensor > > **  p) [inline]

Definition at line 172 of file solver_mv_monomial_box_rep.hpp.

    {
      
      return p[0];
    }
Seq<C> subdiv_center ( const unsigned &  i) [inline]

Definition at line 297 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().

    {
      Seq<C> tt;
      // Seq<double> t;
      tt.resize( dim );
      tt[i]= this->middle(i);
      
      return tt;
    }
Seq<double> subdiv_point ( const unsigned &  i) [inline]

Definition at line 307 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::subdiv_center().

    {
      return  this->template point<double>(this->subdiv_center(i));
    }
void subdivide ( STACK &  stck) [inline]

Subdivide in all directions.

Definition at line 406 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().

    {
        int i;
        Seq<int> ind(dim);
        box_rep * b;

        for (;;) 
        {
            // copy box
            b = new box_rep( *this ) ;
                
            // transform box
            for (i = 0; i < dim ; ++i)  // for all vars
                if ( ind[i] )
                    b->shift_box(1,i);
                else
                    b->reverse_and_shift_box(i);
            b->update_data();           

            // push box in stack
            stck.push ( b );

            // next 
            for (i = 0; i < dim ; ++i) 
                if (++ind[i] <2 ) break; else ind[i]=0 ;
            if (i == dim ) break;
        }
    };
void subdivide ( const int &  v,
STACK &  stck,
m = C(1) 
) [inline]

Subdivide in direction v only.

Definition at line 451 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().

        {
            box_rep * b;
        
            // right box
            b = new box_rep( *this ) ;
            b->shift_box( m ,v);
            b->update_data();           
            stck.push ( b );

            // left box
            b = new box_rep( *this ) ;
            b->contract_box(m,v);
            b->reverse_and_shift_box(v);
            //b->reverse_box( v); // produces thin boxes
            b->update_data();           
            stck.push ( b );
        };
void subdivide ( const int &  v,
C &  m,
STACK &  stck 
) [inline]

Subdivide in direction v and at point x_v=m.

Definition at line 471 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().

        {
            box_rep * b;
            box_rep tmp(*this);
        
            // left box
            b = new box_rep( tmp ) ;
            b->contract_box( m ,v);
            b->reverse_and_shift_box(v);
            b->reverse_box( v); //mirror back
            b->update_data();           
            stck.push ( b );

            // right box
            b = new box_rep( tmp ) ;
            b->shift_box( m, v);
            b->update_data();           
            stck.push ( b );
        };
int** submatrix ( C **  matrix,
int  order,
int  i,
int  j 
) [inline]

Definition at line 179 of file solver_mv_monomial_box_rep.hpp.

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

    {
      
      C **subm;
      int p, q;         // Indexes for matrix
      int a = 0, b;     // Indexes for subm
      subm = new int* [order - 1];
      
      for(p = 0; p < order; p++) {
        if(p==i) continue;      //Skip ith row
        subm[a] = new C[order - 1];
        
        b = 0;
        
        for(q = 0; q< order; q++) {
          if(q==j) continue;    //Skip jth column
          subm[a][b++] = matrix[p][q];
        }
        a++; //Increment row index
      }
      return subm;
    }
POL system ( const int  i) [inline]

Definition at line 233 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

{ return S[i]; }
Seq<POL> system ( ) [inline]

Accessors.

Definition at line 151 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().

{ return S; }
POL system ( unsigned  i) [inline]

Definition at line 153 of file solver_mv_monomial_box_rep.hpp.

References box_rep< POL >::S.

{ return S[i]; }
void update_data ( ) [inline]

Definition at line 58 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().

    {

      //C t;
      
      // scale coefficients
#ifdef DIVISION
       for( unsigned i=0; i<S.size(); i++ ){
          t= *std::max_element( (S[i]).begin(), (S[i]).end() );
          S[i]= S[i]/t;
        }
#endif

      // Precondition
      Seq<double> c= this->point( this->middle() ) ;
      //double *fc, *jc, *ijc;
      Seq<POL> S1= S;

      // DPOL * J= jacobian(S1);

      // jc= eval_poly_matrix( c, J, dim);   // Jacobian evaluated on c
      // ijc= new double[dim*dim];
      // linear::LUinverse(ijc, jc, dim);

      // for( unsigned i=0; i<dim; i++ ){
      //   S[i]=0;
      //   for( unsigned j=0; j<dim; j++ )
      //     S[i] +=  ijc[i*dim+j] * S1[j] ;
      // }
    }
FT volume ( ) [inline]

Definition at line 158 of file solver_mv_monomial_box_rep.hpp.

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

    {
      Seq<Interval<FT> > s;
      FT v(1);
      
      s= domain<FT>();
      
      for (unsigned i=0; i!=s.size(); i++ )
        v *= s[i].width();
      
      return v;
    }
FT width ( unsigned &  t) [inline]

The width, corresponding max projection returned in t.

Definition at line 678 of file solver_mv_monomial_box_rep.hpp.

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

        {
            unsigned i;
            FT w;
            Seq<Interval<FT> >  s ;

            s= domain<FT>();
            w= s[0].width(); t= 0;

            for ( i=0; i!=s.size(); ++i )
                if ( s[i].width() > w) 
                { w=s[i].width() ; t=i; }

            return w;
        };
FT width ( ) [inline]

The width of the box (max of projection widths)

Definition at line 668 of file solver_mv_monomial_box_rep.hpp.

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

        {
            unsigned i;
            FT m=this->width<FT>(i);
            
            return m;
        };

Member Data Documentation


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