|
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().