Example #1
0
    vec bokhoven::solve(const vec& q, const stop& s, vec x ) const {
      const natural n = lcp.dim();
      
      assert(q.rows() == int(n));
      
      if(x.empty()) { x = vec::Zero(n); }
      assert( x.rows() == q.rows() );
      
      const mat& M = lcp.M;
      
      algo::iter_eps(s, [&](real& eps) {
	  
	  x.each([&](natural i ) {
	      const real x_i = x(i);
	      
	      x(i) = (q(i) - this->P.row(i).dot(x) + std::abs( x(i) ) - M.row(i).dot(x.array().abs().matrix()) ) / this->d(i);
	      
	      const real diff = x(i) - x_i;
	      eps += diff * diff;
	    });
	  eps = std::sqrt(eps);
	});
      
      return (x.array().abs() + x.array());
    }
Example #2
0
  static void print_vec(const vec& eta) {
    
    mat zob = mat::Zero(eta.rows(), 2);

    eta.each([&](natural i) {
	zob.col(0)(i) = i;
	zob.col(1)(i) = eta(i);
      });
    
    core::log()("Cumulative variance:");
    core::log()(zob);
    
  }
Example #3
0
  vec pca::cumul(const vec& eig) {
    vec res = vec::Zero(eig.rows());
    
    real sum = 0;

    eig.each([&](natural i ) {
	sum += eig(i) * eig(i);
	res(i) = sum;
      });
    assert( sum > 0 );
    
    res /= sum;

    return res;
  }
Example #4
0
  real cond( const vec& eigen) {
    
    real min = 1e42;
    real max = 0;
    
    eigen.each([&](natural i) {
	real ei = std::abs( eigen(i) );

	if( ei < min ) min = ei;
	if( ei > max ) max = ei;

      });
    assert( min );
    return max / min;
  }