6 #ifndef realroot_SOLVE_SBDSLV_STRGY_CVMATRIX_HPP
7 #define realroot_SOLVE_SBDSLV_STRGY_CVMATRIX_HPP
19 template<
class system,
class _previous_ = strgy::empty<system> >
26 void symeigen2( creal_t * base, creal_t * m,
bool normalise =
false )
33 c = m[0]*m[3] - m[1]*m[1];
43 if ( normalise ) sc =
std::sqrt( base[0] * base[0] + base[1] * base[1] ) * vp[0];
47 base[2] =-(m[3]-vp[1]);
49 if ( normalise ) sc =
std::sqrt( base[2] * base[2] + base[3] * base[3] ) * vp[1];
55 void symeigen(
system * slv, creal_t * base, creal_t * m,
unsigned n,
const creal_t& eps = 1e-12 )
57 if ( n == 2 ) {
symeigen2( base, m );
return; };
63 for ( i = 0; i < n; i ++ )
64 for ( j = i+1; j < n; j ++ )
67 for ( i = 0; i < n ; i ++ )
71 for (
unsigned k = 0; k < n; base[i*n+k] /= vp[i], k ++ ) ;
77 slv->restrict( eqs, n );
84 for ( sz_t ie = 0; ie < n; ie ++ )
86 creal_t * data = slv->
elldata(eqs[ie]);
88 for (
unsigned k = 0; k < nsmp; k ++ )
89 mean[ie] += (data[k]-mean[ie])/(k+1);
93 for ( sz_t ie = 0; ie < n; ie ++ )
95 creal_t * data0 = slv->
elldata(eqs[ie]);
96 creal_t m0 = mean[ie];
97 for ( sz_t
id = ie;
id < n;
id ++ )
99 creal_t * data1 = slv->
elldata(eqs[
id]);
100 creal_t m1 = mean[id];
102 for (
int k = 0; k < slv->
m_elenv.
sz(); k ++ )
103 cm += ((data0[k]-m0)*(data1[k]-m1)-cm)/(k+1);
104 cvmatrix[ ie*n + id ] = cm;
109 for ( sz_t ie = 0; ie < n; ie ++ )
110 for ( sz_t
id = 0;
id < ie;
id ++ )
111 cvmatrix[ie*n+
id] = cvmatrix[
id*n+ie];
121 if ( ! _previous_::process(slv) )
return false;
system::creal_t creal_t
Definition: strgy_cvmatrix.h:22
void symeigen(system *slv, creal_t *base, creal_t *m, unsigned n, const creal_t &eps=1e-12)
Definition: strgy_cvmatrix.h:55
const C & b
Definition: Interval_glue.hpp:25
eenv_t m_elenv
Definition: system_system.h:264
dstack_t::interval_t interval_t
Definition: system_system.h:31
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
void symeigen(real_t *M, real_t *d, int n)
Definition: linear_householder.hpp:170
int sz_t
Definition: system_system.h:35
void elevate(sz_t e, const texp::false_t &)
Definition: system_system.h:433
system::interval_t interval_t
Definition: strgy_cvmatrix.h:24
real_t mean(real_t const *const data, int sz, int st)
Definition: loops_vctops.hpp:122
bool project(sz_t *eqs=0, sz_t ne=0)
Definition: system_system.h:548
void transform(creal_t *mat, sz_t *eqs, sz_t n)
Definition: system_system.h:530
Definition: rounding_mode.hpp:71
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
real_t creal_t
Definition: system_system.h:28
void abs(Interval< C, r > &x, const Interval< C, r > &a)
Definition: Interval_fcts.hpp:185
void applycvmatrix(system *slv, sz_t *eqs, sz_t n)
Definition: strgy_cvmatrix.h:75
Definition: system_system.h:25
int sz() const
return the total number of coefficients of the dense representation
Definition: tensor_eenv_fcts.hpp:16
scalar< T > sqrt(const scalar< T > &b)
Definition: scalar.hpp:501
Definition: strgy_cvmatrix.h:20
bool process(system *slv)
Definition: strgy_cvmatrix.h:119
sz_t * m_eqssel
Definition: system_system.h:46
const C & c
Definition: Interval_glue.hpp:45
sz_t neqs() const
Definition: system_system.h:85
creal_t * elldata(sz_t e)
Definition: system_system.h:405
system::sz_t sz_t
Definition: strgy_cvmatrix.h:23
Interval< T, r > max(const Interval< T, r > &a, const Interval< T, r > &b)
Definition: Interval_fcts.hpp:135
void symeigen2(creal_t *base, creal_t *m, bool normalise=false)
Definition: strgy_cvmatrix.h:26
#define assert(expr, msg)
Definition: shared_object.hpp:57