realroot_doc 0.1.1
|
#include <system_descartes1d.hpp>
Definition at line 303 of file system_descartes1d.hpp.
descartes_solver | ( | unsigned | sz, |
const real_t & | eps = 1e-12 |
||
) | [inline] |
~descartes_solver | ( | ) | [inline] |
Definition at line 442 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_stck.
{ delete[] m_stck; };
void output | ( | Prms & | prms, |
real_t * | stck, | ||
const texp::true_t & | |||
) | [inline] |
Definition at line 369 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_sz.
Referenced by descartes_solver< real_t, local_method >::solve().
{ prms.output( stck[m_sz], stck[m_sz+1], stck[0] > 0, stck[m_sz-1] > 0 ); };
void output | ( | Prms & | prms, |
real_t * | stck, | ||
const texp::false_t & | |||
) | [inline] |
Definition at line 372 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_sz.
{ prms.output( stck[m_sz], stck[m_sz+1] ); };
void output | ( | Prms & | prms, |
real_t * | stck | ||
) | [inline] |
Definition at line 376 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::output().
Referenced by descartes_solver< real_t, local_method >::output().
{ output( prms, stck, sign_wanted< Prms >::result_t() ); };
real_t precision | ( | real_t * | l | ) | [inline] |
Definition at line 332 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_sz.
Referenced by descartes_solver< real_t, local_method >::solve().
bool precision_reached | ( | real_t * | l | ) | [inline] |
Definition at line 333 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_prec, and descartes_solver< real_t, local_method >::m_sz.
void reset | ( | unsigned | sz, |
const real_t & | prec | ||
) | [inline] |
Definition at line 312 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_prec, and descartes_solver< real_t, local_method >::m_sz.
void rockwoodcuts | ( | real_t * | nxt, |
real_t * | prv, | ||
real_t * | mid | ||
) | [inline] |
Definition at line 345 of file system_descartes1d.hpp.
References mmx::brnops::decasteljau(), descartes_solver< real_t, local_method >::m_sz, and mmx::brnops::rockwood_cut().
{ // [-------------] b // [---][--------] b // [---][---][---] b real_t i0, i1; brnops::rockwood_cut( i0, nxt, m_sz ); brnops::rockwood_cut( i1, nxt+m_sz-1, m_sz, -1 ); std::cout << i0 << ", " << (1.0-i1) << std::endl; i1 = (1.0-i1); brnops::decasteljau(nxt,prv,m_sz,i0); brnops::decasteljau(nxt,mid,m_sz,(i1-i0)/(1.0-i0)); i0 = (1.0-i0)*nxt[m_sz] + i0*nxt[m_sz+1]; i1 = (1.0-i1)*nxt[m_sz] + i1*nxt[m_sz+1]; prv[m_sz] = nxt[m_sz]; prv[m_sz+1] = i0; mid[m_sz] = i0; mid[m_sz+1] = i1; nxt[m_sz] = i1; };
void set_sz | ( | unsigned | sz | ) | [inline] |
Definition at line 366 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_sz.
{ m_sz = sz;};
unsigned solve | ( | Prms & | prms, |
const In & | in, | ||
int | option = 0 |
||
) | [inline] |
Definition at line 380 of file system_descartes1d.hpp.
References descartes_solver< real_t, local_method >::m_lmth, descartes_solver< real_t, local_method >::m_prec, descartes_solver< real_t, local_method >::m_stck, descartes_solver< real_t, local_method >::m_sz, descartes_solver< real_t, local_method >::output(), descartes_solver< real_t, local_method >::precision(), mmx::realroot::sgn(), mmx::vctops::sgncnt(), and descartes_solver< real_t, local_method >::split().
{ for ( unsigned i = 0; i < m_sz; i ++ ) m_stck[i] = in[i]; m_stck[m_sz] = 0.0; m_stck[m_sz+1] = 1.0; unsigned roots = 0; const unsigned inc = m_sz+2; real_t * stck = m_stck; real_t * stop = stck-inc; do { unsigned sgn = vctops::sgncnt(stck,m_sz); switch( sgn ) { case 0: stck -= inc; break; case 1: roots ++; if ( !option || (roots == option) ) { if ( m_lmth == 0 ) m_lmth = new local_method(in,m_sz); m_lmth->reach( stck, stck[m_sz], stck[m_sz+1], m_prec ); output( prms, stck ); }; stck -= inc; break; default: if( precision( stck ) < m_prec ) { roots++; if ( !option || (roots == option) ) output(prms,stck); stck -= inc; break; }; split(stck); stck += inc; break; } } while( stck != stop ); if ( m_lmth ) { delete m_lmth; m_lmth = 0; }; return roots; };
void split | ( | real_t * | r | ) | [inline] |
Definition at line 324 of file system_descartes1d.hpp.
References mmx::brnops::decasteljau(), and descartes_solver< real_t, local_method >::m_sz.
Referenced by descartes_solver< real_t, local_method >::solve().
local_method* m_lmth |
Definition at line 309 of file system_descartes1d.hpp.
Referenced by descartes_solver< real_t, local_method >::descartes_solver(), and descartes_solver< real_t, local_method >::solve().
real_t m_prec |
unsigned m_ssz |
Definition at line 306 of file system_descartes1d.hpp.
real_t* m_stck |
Definition at line 308 of file system_descartes1d.hpp.
Referenced by descartes_solver< real_t, local_method >::descartes_solver(), descartes_solver< real_t, local_method >::solve(), and descartes_solver< real_t, local_method >::~descartes_solver().
unsigned m_sz |
Definition at line 306 of file system_descartes1d.hpp.
Referenced by descartes_solver< real_t, local_method >::descartes_solver(), descartes_solver< real_t, local_method >::output(), descartes_solver< real_t, local_method >::precision(), descartes_solver< real_t, local_method >::precision_reached(), descartes_solver< real_t, local_method >::reset(), descartes_solver< real_t, local_method >::rockwoodcuts(), descartes_solver< real_t, local_method >::set_sz(), descartes_solver< real_t, local_method >::solve(), and descartes_solver< real_t, local_method >::split().