Example #1
0
Foam::scalar Foam::Rosenbrock23::solve
(
    const scalar x0,
    const scalarField& y0,
    const scalarField& dydx0,
    const scalar dx,
    scalarField& y
) const
{
    odes_.jacobian(x0, y0, dfdx_, dfdy_);

    for (label i=0; i<n_; i++)
    {
        for (label j=0; j<n_; j++)
        {
            a_(i, j) = -dfdy_(i, j);
        }

        a_(i, i) += 1.0/(gamma*dx);
    }

    LUDecompose(a_, pivotIndices_);

    // Calculate k1:
    forAll(k1_, i)
    {
        k1_[i] = dydx0[i] + dx*d1*dfdx_[i];
    }
    boost::function<Real (Time)> GeneralizedHullWhite::speed() const {

		std::vector<Real> speedvals;
		speedvals.push_back(a_(0.0001));
		for (Size i=0;i<a_.size()-1;i++)
			speedvals.push_back(
			a_(
			(speedstructure_[i+1]-speedstructure_[0])/365.0
			- 0.00001));

		return PiecewiseLinearCurve(speedperiods_, speedvals);
	}
Precision JumpingCoefficients::getCenter(
   const Position,
   const Index sx,
   const Index sy,
   const Index nx,
   const Index ny ) const
{
    double value=
           nx*nx*(a_((sx-0.5)/nx,1.*sy/ny)+a_((sx+0.5)/nx,1.*sy/ny))
          +ny*ny*(b_(1.*sx/nx,(sy-0.5)/ny)+b_(1.*sx/nx,(sy+0.5)/ny));

    return value;
}
void AdmittanceController::update(const Eigen::VectorXd& tau, Eigen::VectorXd& qdot_reference, const KDL::JntArray& q_current, Eigen::VectorXd& q_reference) {

    // Update filters --> as a result desired velocities are known
    for (int i = 0; i<tau.size(); i++) {
/// Check input values (and create segfault to debug)
        if (!(fabs(tau(i)) < 10000.0 && fabs(qdot_reference_previous_(i)) < 10000.0) ) {
            std::cout << "tauin: " << tau(i) << ", qdot: " << qdot_reference_previous_(i) << std::endl;
            assert(false);
        } else {
        qdot_reference(i)  = b_(0,i) * tau(i);
        qdot_reference(i) += b_(1,i) * tau_previous_(i);
        qdot_reference(i) -= a_(1,i) * qdot_reference_previous_(i);
        qdot_reference(i) *= k_(i);

        // Integrate desired velocities and limit outputs
        q_reference(i) = std::min(q_max_(i),std::max(q_min_(i),q_current(i)+Ts_*qdot_reference(i)));
}
    }
    tau_previous_ = tau;
    qdot_reference_previous_ = qdot_reference;

    //ROS_INFO("qdr = %f %f %f %f", qdot_reference(0), qdot_reference(1), qdot_reference(2), qdot_reference(3));
    ///ROS_INFO("qdrspindle = %f", qdot_reference(7));

}
Example #5
0
int test_delete1()
{
	A_ a_(10);     // OK
	// A_ b(3.14);   // Error: conversion from double to int disabled
	// a = b;       // Error: assignment operator disabled

	return 0;
}
NumericArray JumpingCoefficients::getL(
    const Position,
    const Index sx,
    const Index sy,
    const Index nx,
    const Index ny ) const
{
	NumericArray result( 0.0, 5 );
    result[C]=
           1.0*nx*nx*(a_((sx-0.5)/nx,1.*sy/ny)+a_((sx+0.5)/nx,1.*sy/ny))
          +1.0*ny*ny*(b_(1.*sx/nx,(sy-0.5)/ny)+b_(1.*sx/nx,(sy+0.5)/ny));

    result[W]=-1.0*nx*nx * a_((sx-0.5)/nx,1.*sy/ny);
    result[E]=-1.0*nx*nx * a_((sx+0.5)/nx,1.*sy/ny);
    result[S]=-1.0*ny*ny * b_(1.*sx/nx,(sy-0.5)/ny);
    result[N]=-1.0*ny*ny * b_(1.*sx/nx,(sy+0.5)/ny);
    return result; 
}
Precision JumpingCoefficients::apply(
    const NumericArray& u,
    const Position,
    const Index sx,
    const Index sy,
    const Index nx,
    const Index ny ) const
{
    return 
         ( nx*nx*(a_((sx-0.5)/nx,1.*sy/ny)+a_((sx+0.5)/nx,1.*sy/ny))
          +ny*ny*(b_(1.*sx/nx,(sy-0.5)/ny)+b_(1.*sx/nx,(sy+0.5)/ny))
         )*u[sy*(nx+1)+sx]

         -1.0*nx*nx * a_((sx-0.5)/nx,1.*sy/ny) * u[sy*(nx+1)+sx-1]
         -1.0*nx*nx * a_((sx+0.5)/nx,1.*sy/ny) * u[sy*(nx+1)+sx+1]
         -1.0*ny*ny * b_(1.*sx/nx,(sy-0.5)/ny) * u[(sy-1)*(nx+1)+sx]
         -1.0*ny*ny * b_(1.*sx/nx,(sy+0.5)/ny) * u[(sy+1)*(nx+1)+sx];

}
	SSMProcess* RepeatedStateContractions::contractSpecificStates(int n , int m , SSMProcess tSSMProcess){
		assert(n <= this->m_ptrData->getNumStates());
		assert(m <= this->m_ptrData->getNumStates());
		assert(n != m);

		rmatrix a( mid( tSSMProcess.getDistributions() ) );
		rmatrix t( mid( tSSMProcess.getTransitionMatrix() ) );

		//setting up initial values
		rvector p(tSSMProcess.getStationaryProbabilities());
		rmatrix a_( RMatrixUtils::zeros( Lb(a,ROW) , Ub(a,ROW)-1 , Lb(a,COL) , Ub(a,COL) ) );
		rmatrix p_( RMatrixUtils::zeros( Lb(t,ROW) , Ub(t,ROW)-1 , Lb(t,COL) , Ub(t,COL)-1 ) );

		//contracting state in transitionMatrix
		for(int i = Lb(a,ROW); i <= Ub(a,ROW); i++){
			int buff = (i > n) ? -1 : 0;

			for(int x = Lb( Row(a,1) ); x <= Ub( Row(a,1) );x++){
				real value = 0.0;
				if(i != m && i != n){
					a_[i+buff][x] = a[i][x];
				}
				else if(i == m){
					a_[i+buff][x] = (p[i]*a[i][x] + p[n]*a[n][x]) / (p[n]+p[m]);
				}
			}
		}

		for(int i = 1; i < tSSMProcess.getNumStates(); i++){
			int buffI = (i > n) ? -1 : 0;

			for(int j = 1; j < tSSMProcess.getNumStates();j++){
				int buffJ = (j > n) ? -1 : 0;

				real value = 0.0;
				if(i != m && i != n && j != n && j != m){
					value = t[i][j];
				}
				else if( i != m && i != n && j == m ){
					value = t[i][m] + t[i][n];
				}
				else if( i == m && j != m && j != n){
					value = (p[m]*t[m][j] + p[n]*t[n][j]) / (p[m] + p[n]);
				}
				else if( i == m && j == m){
					value = ( (p[m]*(t[m][m]+t[m][n])) + (p[n]*(t[n][m]+t[n][n])) ) / (p[m] + p[n]);
				}

				p_[i+buffI][j+buffJ] = value;
			}
		}

		return new SSMProcess( p_ , a_ , false );
	}
void Foam::inclinedFilmNusseltHeightFvPatchScalarField::write
(
    Ostream& os
) const
{
    fixedValueFvPatchScalarField::write(os);
    writeEntry(os, GammaMean_());
    writeEntry(os, a_());
    writeEntry(os, omega_());
    writeEntry(os, "value", *this);
}
void dtkMatrixOperationsTestCase::testSolve(void)
{
    dtkUnderscore _;

    //Matrix-vector
    dtkDenseMatrix<double> a(4,4);
    a(1,_)=8.,6.,9.,9.;
    a(2,_)=9.,0.,9.,4.;
    a(3,_)=1.,2.,1.,8.;
    a(4,_)=9.,5.,9.,1.;

    dtkDenseVector<double> b(4); b = 1,2,3,4;
    dtkDenseVector<double> x=dtk::lapack::solve(a,b);

    dtkDenseVector<double> res(4); res = 5.34263959,0.53553299,-5.22081218,0.22588832;

    for(int i=1;i<5;i++)
        QVERIFY(abs(res(i)-x(i))<1e-7);

    dtkDenseMatrix<double> a_(4,3);
    dtkDenseVector<double> b_(4);


    a_(_,1)=1.,0.,0.,0.;
    a_(_,2)=0.,1.,0.,0.;
    a_(_,3)=0.,0.,1.,1.;

    b_ = 1, 2, 2, 1;

    dtkDenseVector<double> res_(3); res_ = 1, 2, 1.5;

    dtkDenseVector<double> x_= dtk::lapack::solve(a_,b_);
    for(int i = 1; i < x_.length(); ++i) {
        QVERIFY((x_(i) - res_(i)) < 1e-7);
    }

}
EstimateEMOS2<T,N>::EstimateEMOS2(
    Array< RectDomain<N>, 1>& strata,
    Array< Array<T,N>, 1>& psfs,
    Array<T,N>& img,
    int iterations,
    T epsilon

) : 
    EstimateIterative<T,N>(psfs(0), img, iterations),
    epsilon_(epsilon), strata_(strata)
{
    a_.resize(this->img_.extent(0));
    strata_.resize(strata.length(0));
    psfsF_.resize(psfs.length(0));
    TinyVector<int,N> extent(this->img_.extent());
    s_.resize(extent);
    prev_.resize(extent);
    extent(0) *= 2;
    s2_.resize(extent);
    extent(N-1) = extent(N-1)/2+1;
    estF_.resize(extent);
    sF_.resize(extent);

    // resize the psfs and compute the Fourier transform (OTF)
    for ( int m = 0; m < psfs.length(0); m++ ) 
    {
        psfsF_(m).resize(extent);
        Array<T,N> psfResized(s2_.extent()); 
        padCenter(psfs(m), psfResized); 
        psfsF_(m) = forwardFFT(psfResized);
    }

    // compute the interpolation constants
    a_ = 0;
    int index = strata_(0).lbound(int(0));
    for ( int m = 0; m < strata.length(0); m++ ) 
    {
        int l = strata_(m).lbound(int(0));
        int u = strata_(m).ubound(int(0));
        int size = u - l + 1;
        for ( int j = 0; j < size; j++ ) 
        { 
            a_(index) = T(1) - T(j)/T(size);
            index++;
        }
    }
    // compute the scaling factors
    scale_ = T(1.0)/strata.length(0);
}
Example #12
0
dvariable betacf(const dvariable& a, const dvariable& b, const dvariable& x, int MAXIT)
{  
  typedef tiny_ad::variable<1, 3> Float;
  Float a_ (value(a), 0);
  Float b_ (value(b), 1);
  Float x_ (value(x), 2);
  Float ans = betacf<Float>(a_, b_, x_, MAXIT);
  tiny_vec<double, 3> der = ans.getDeriv();

  dvariable hh;
  value(hh) = ans.value;
  gradient_structure::GRAD_STACK1->set_gradient_stack(default_evaluation3ind, &(value(hh)), 
                         &(value(a)), der[0] ,&(value(b)), der[1], &(value(x)), der[2]);
  return hh;
}
Example #13
0
inline void
dispatch(A& a,
    typename sake::alloc::traits<A>::void_pointer const p_obj,
    Emplacer const & e,
    sake::int_tag<1>)
{
    typedef sake::alloc::traits<A> traits_;
    SAKE_USING_TYPEDEF( typename Emplacer, value_type );
    SAKE_USING_TYPEDEF( typename traits_::template value_traits< value_type >, pointer );
    typedef typename sake::alloc::rebind< A, value_type >::type rebind_type;
    BOOST_STATIC_ASSERT((boost::is_same<
        rebind_type,
        typename sake::alloc::rebind< rebind_type, value_type >::type
    >));
    rebind_type a_(a);
    a_.construct(static_cast< pointer >(p_obj), e.construct());
}
Example #14
0
vec Filter::Doit(vec u_){
    u__.col(0) = u_;
    y__.col(0) = b_(0)*u__.col(0);
    for(int i = 1; i <= order; i++)
        y__.col(0)  += b_(i)*u__.col(i) - a_(i)*y__.col(i);

    
    for(int i = order; i > 0; i--){
        u__.col(i) = u__.col(i-1);
        y__.col(i) = y__.col(i-1);
    }

    //u__ = shitf(u__,+1);
    //y__ = shitf(u__,+1);

    return y__.col(0);
}
Example #15
0
void Mesher::remove_dupes()
{
    std::map<std::array<float, 3>, size_t> verts;
    std::set<std::array<size_t, 3>> tris;
    size_t vertex_id = 0;

    for (auto itr=triangles.begin(); itr != triangles.end(); ++itr)
    {
        std::array<size_t, 3> t;
        int i=0;
        // For each vertex, find whether it's already in our vertex
        // set.  Create an array t with vertex indicies.
        for (auto v : {itr->a_(), itr->b_(), itr->c_()})
        {
            auto k = verts.find(v);
            if (k != verts.end())
            {
                t[i++] = k->second;
            }
            else
            {
                verts[v] = vertex_id;
                t[i++] = vertex_id;
                vertex_id++;
            }
        }

        // Check to see if there are any other triangles that use these
        // three vertices; if so, delete this triangle.
        std::sort(t.begin(), t.end());
        if (tris.count(t))
        {
            itr = triangles.erase(itr);
            itr--;
        }
        else
        {
            tris.insert(t);
        }
    }
}
Example #16
0
CTEST(Reversal, check_reversal)
{ 
    a_str a, b;
    a_gc;
    
    a = a_(a_reverse(a_new("")));
    ASSERT_EQUAL(0, *a);
    
    a = a_(a_reverse(a_new("a")));
    ASSERT_EQUAL(0, strcmp(a, "a"));
    
    a = a_(a_reverse(a_new("aa")));
    ASSERT_EQUAL(0, strcmp(a, "aa"));
    
    a = a_(a_reverse(a_new("Ξ‘Ξ±Ξ’Ξ²Ξ“Ξ³Ξ”Ξ΄Ξ•Ξ΅Ξ–ΞΆΞ—Ξ·Ξ˜ΞΈΞ™ΞΉΞšΞΊΞ›Ξ»ΞœΞΌΞΞ½ΞžΞΎΞŸΞΏΞ Ο€Ξ‘ΟΞ£ΟƒΞ€Ο„Ξ₯Ο…Ξ¦Ο†Ξ§Ο‡Ξ¨ΟˆΞ©Ο‰")));
    ASSERT_EQUAL(0, strcmp(a, "Ο‰Ξ©ΟˆΞ¨Ο‡Ξ§Ο†Ξ¦Ο…Ξ₯Ο„Ξ€ΟƒΞ£ΟΞ‘Ο€Ξ ΞΏΞŸΞΎΞžΞ½ΞΞΌΞœΞ»Ξ›ΞΊΞšΞΉΞ™ΞΈΞ˜Ξ·Ξ—ΞΆΞ–Ξ΅Ξ•Ξ΄Ξ”Ξ³Ξ“Ξ²Ξ’Ξ±Ξ‘"));
    
    a = a_(a_reverse(a_new("ΰ€…ΰ€‡ΰ€‰ΰ€‹ΰ€Œΰ€ΰ€“ΰ€†ΰ€ˆΰ€Šΰ₯ ΰ₯‘ΰ€ΰ€”")));
    ASSERT_EQUAL(0, strcmp(a, "ΰ€”ΰ€ΰ₯‘ΰ₯ ΰ€Šΰ€ˆΰ€†ΰ€“ΰ€ΰ€Œΰ€‹ΰ€‰ΰ€‡ΰ€…"));
    
    a = a_(a_reverse(a_new("β„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒ")));
    ASSERT_EQUAL(0, strcmp(a, "β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„"));
    
    a = a_(a_reverse_new(a_(a_new(""))));
    ASSERT_EQUAL(0, *a);
    
    a = a_(a_reverse_new(a_(a_new("a"))));
    ASSERT_EQUAL(0, strcmp(a, "a"));
    
    a = a_(a_reverse_new(a_(a_new("Ξ‘Ξ±Ξ’Ξ²Ξ“Ξ³Ξ”Ξ΄Ξ•Ξ΅Ξ–ΞΆΞ—Ξ·Ξ˜ΞΈΞ™ΞΉΞšΞΊΞ›Ξ»ΞœΞΌΞΞ½ΞžΞΎΞŸΞΏΞ Ο€Ξ‘ΟΞ£ΟƒΞ€Ο„Ξ₯Ο…Ξ¦Ο†Ξ§Ο‡Ξ¨ΟˆΞ©Ο‰"))));
    ASSERT_EQUAL(0, strcmp(a, "Ο‰Ξ©ΟˆΞ¨Ο‡Ξ§Ο†Ξ¦Ο…Ξ₯Ο„Ξ€ΟƒΞ£ΟΞ‘Ο€Ξ ΞΏΞŸΞΎΞžΞ½ΞΞΌΞœΞ»Ξ›ΞΊΞšΞΉΞ™ΞΈΞ˜Ξ·Ξ—ΞΆΞ–Ξ΅Ξ•Ξ΄Ξ”Ξ³Ξ“Ξ²Ξ’Ξ±Ξ‘"));
    
    a = a_(a_reverse_new(a_(a_new("ΰ€…ΰ€‡ΰ€‰ΰ€‹ΰ€Œΰ€ΰ€“ΰ€†ΰ€ˆΰ€Šΰ₯ ΰ₯‘ΰ€ΰ€”"))));
    ASSERT_EQUAL(0, strcmp(a, "ΰ€”ΰ€ΰ₯‘ΰ₯ ΰ€Šΰ€ˆΰ€†ΰ€“ΰ€ΰ€Œΰ€‹ΰ€‰ΰ€‡ΰ€…"));
    
    a = a_(a_reverse_new(a_(a_new("β„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒ"))));
    ASSERT_EQUAL(0, strcmp(a, "β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„"));
    
    b = a_new(NULL);
    b = a_(a_reverse_str(a_(a_new("β„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒ")), b));
    ASSERT_EQUAL(0, strcmp(b, "β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„β˜ƒβ„"));

    b = a_new(NULL);
    b = a_(a_reverse_str(a_(a_new("ΰ€…ΰ€‡ΰ€‰ΰ€‹ΰ€Œΰ€ΰ€“ΰ€†ΰ€ˆΰ€Šΰ₯ ΰ₯‘ΰ€ΰ€”")), b));
    ASSERT_EQUAL(0, strcmp(b, "ΰ€”ΰ€ΰ₯‘ΰ₯ ΰ€Šΰ€ˆΰ€†ΰ€“ΰ€ΰ€Œΰ€‹ΰ€‰ΰ€‡ΰ€…"));

    b = a_new(NULL);
    b = a_(a_reverse_str(a_(a_new("")), b));
    ASSERT_EQUAL(0, *b);
    
    b = a_new(NULL);
    b = a_(a_reverse_str(a_(a_new("a")), b));
    ASSERT_EQUAL(0, strcmp(b, "a"));
    
    a_gc_done();
}
Example #17
0
std::list<Vec3f> Mesher::get_contour()
{
    // Find all of the singular edges in this fan
    // (edges that aren't shared between multiple triangles).
    std::set<std::array<float, 6>> valid_edges;
    for (auto itr=voxel_start; itr != voxel_end; ++itr)
    {
        if (valid_edges.count(itr->ba_()))
            valid_edges.erase(itr->ba_());
        else
            valid_edges.insert(itr->ab_());

        if (valid_edges.count(itr->cb_()))
            valid_edges.erase(itr->cb_());
        else
            valid_edges.insert(itr->bc_());

        if (valid_edges.count(itr->ac_()))
            valid_edges.erase(itr->ac_());
        else
            valid_edges.insert(itr->ca_());
    }

    std::set<std::array<float, 3>> in_fan;

    std::list<Vec3f> contour = {voxel_start->a};
    in_fan.insert(voxel_start->a_());
    in_fan.insert(voxel_start->b_());
    in_fan.insert(voxel_start->c_());

    fan_start = voxel_start;
    voxel_start++;

    while (contour.size() == 1 || contour.front() != contour.back())
    {
        std::list<Triangle>::iterator itr;
        for (itr=fan_start; itr != voxel_end; ++itr)
        {
            const auto& t = *itr;
            if (contour.back() == t.a && valid_edges.count(t.ab_()))
            {
                contour.push_back(t.b);
                break;
            }

            if (contour.back() == t.b && valid_edges.count(t.bc_()))
            {
                contour.push_back(t.c);
                break;
            }

            if (contour.back() == t.c && valid_edges.count(t.ca_()))
            {
                contour.push_back(t.a);
                break;
            }
        }
        // If we broke out of the loop (meaning itr is pointing to a relevant
        // triangle which should be moved forward to before voxel_start), then
        // push the list around and update iterators appropriately.
        if (itr != voxel_end)
        {
            in_fan.insert(itr->a_());
            in_fan.insert(itr->b_());
            in_fan.insert(itr->c_());

            if (itr == voxel_start)
            {
                voxel_start++;
            }
            else if (itr != fan_start)
            {
                const Triangle t = *itr;
                triangles.insert(voxel_start, t);
                itr = triangles.erase(itr);
                itr--;
            }
        }
    }

    // Special case to catch triangles that are part of a particular fan but
    // don't have any edges in the contour (which can happen!).
    for (auto itr=voxel_start;  itr != voxel_end; ++itr)
    {
        if (in_fan.count(itr->a_()) &&
            in_fan.count(itr->b_()) &&
            in_fan.count(itr->c_()))
        {
            if (itr == voxel_start)
            {
                voxel_start++;
            }
            else if (itr != fan_start)
            {
                const Triangle t = *itr;
                triangles.insert(voxel_start, t);
                itr = triangles.erase(itr);
                itr--;
            }
        }
    }

    // Remove the last point of the contour, since it's a closed loop.
    contour.pop_back();
    return contour;
}
Example #18
0
 double operator()(unsigned i, unsigned j) const {
     return alpha_ * a_(i,j);
 }
Example #19
0
 double operator()(unsigned i, unsigned j) const {
     return a_(i,j) + b_(i,j);
 }
Example #20
0
 double operator()(unsigned i, unsigned j) const {
     double result = 0;
     for (unsigned k = 0; k < a_.cols(); ++k)
         result += a_(i,k) * b_(k,j);
     return result;
 }
Example #21
0
 Real a() const { return a_(0.0); }
Example #22
0
	BigInteger BigInteger::operator*(BigIntegerArithmetic::BigInteger b) { 
		BigInteger a (this->data);
		BigInteger bigint_product;

		if (a.data == "0" || b.data == "0") {
			bigint_product.data = "0";
			return bigint_product;
		}

		int sign1 = 1, sign2 = 1;

		if (a.data[0] == '-') {
			sign1 = -1;
		}

		if (b.data[0] == '-') {
			sign2 = -1;
		}

		int final_sign = sign1 * sign2; 
		BigInteger a_ (a.data);
		BigInteger b_ (b.data);
		if (sign1 == -1) {
			a_.data = a_.data.substr(1, a_.data.length() - 1);
		}
		if (sign2 == -1) {
			b_.data = b_.data.substr(1, b_.data.length() - 1);
		}
	
		std::vector <BigInteger> levels;

		for (int j = b_.data.length() - 1; j >= 0; j --) {
			BigInteger level;
			int carry = 0;

			for (int i = a_.data.length() - 1; i >= 0; i --) {
				int x = a_.data[i] - 48;
				int y = b_.data[j] - 48;

				int temp_product = (x * y) + carry;
				carry = temp_product / 10;
				int sum = temp_product % 10;
				level.data.push_back(sum + 48);
			}
			
			if (carry != 0) {
				level.data.push_back (carry + 48);
			}

			level.data = reverse(level.data);

			for (int k = 0; k < b_.data.length() - 1 - j; k ++) {
				level.data.push_back ('0');
			}

			levels.push_back (level);
		}

		bigint_product = levels[0];

		for (unsigned int i = 1; i < levels.size(); i ++) {
			bigint_product = bigint_product + levels[i];
		}

		if (final_sign == -1) {
			bigint_product.data = "-" + bigint_product.data;
		}
	
		return bigint_product;
	}
void AdmittanceController::initialize(const double Ts, const KDL::JntArray& q_min, const KDL::JntArray& q_max, const std::vector<double>& mass, const std::vector<double>& damping) {

    // Resize relevant parameters
    uint num_joints = 15;
    Ts_ = Ts;
    // ToDo: Make variables (use M and D as inputs?)
    m_.resize(num_joints);
    d_.resize(num_joints);
    k_.resize(num_joints);
    om_.resize(num_joints);
    a_.resize(2,num_joints);
    b_.resize(2,num_joints);
    tau_previous_.resize(num_joints);
    qdot_reference_previous_.resize(num_joints);
    q_min_.resize(num_joints);
    q_max_.resize(num_joints);

    // Set parameters
    /*(hardcoded)
    for (uint i = 0; i<num_joints; i++) {
        m_(i) = 0.1;
        d_(i) = 1;
    }
    m_(7) = 1; // Torso
    d_(7) = 10;   // Torso
    */
    for (uint i = 0; i < num_joints; i++) {
        m_(i) = mass[i];
        d_(i) = damping[i];
    }

    for (uint i = 0; i<num_joints; i++) {

        k_(i) = 1/d_(i);
        om_(i) = d_(i)/m_(i);

        double wp = om_(i) + eps;
        double alpha = wp/(tan(wp*Ts_/2));

        double x1 = alpha/om_(i)+1;
        double x2 = -alpha/om_(i)+1;

        // Numerator and denominator of the filter
        a_(0,i) = 1;
        a_(1,i) = x2 / x1;
        b_(0,i) = 1  / x1;
        b_(1,i) = 1  / x1;

        ///ROS_INFO("a %i = %f, %f, b %i = %f, %f", i, a_(0,i), a_(1,i), i, b_(0,1), b_(1,i));

        // Set previous in- and outputs to zero
        tau_previous_(i) = 0;
        qdot_reference_previous_(i) = 0;

        // Set joint limits
        q_min_(i) = q_min(i);
        q_max_(i) = q_max(i);

    }

    // Set inputs, states, outputs to zero
    ROS_INFO("Admittance controller initialized");

}
Example #24
0
bool Foam::seulex::seul
(
    const scalar x0,
    const scalarField& y0,
    const scalar dxTot,
    const label k,
    scalarField& y,
    const scalarField& scale
) const
{
    label nSteps = nSeq_[k];
    scalar dx = dxTot/nSteps;

    for (label i=0; i<n_; i++)
    {
        for (label j=0; j<n_; j++)
        {
            a_(i, j) = -dfdy_(i, j);
        }

        a_(i, i) += 1/dx;
    }

    LUDecompose(a_, pivotIndices_);

    scalar xnew = x0 + dx;
    odes_.derivatives(xnew, y0, dy_);
    LUBacksubstitute(a_, pivotIndices_, dy_);

    yTemp_ = y0;

    for (label nn=1; nn<nSteps; nn++)
    {
        yTemp_ += dy_;
        xnew += dx;

        if (nn == 1 && k<=1)
        {
            scalar dy1 = 0;
            for (label i=0; i<n_; i++)
            {
                dy1 += sqr(dy_[i]/scale[i]);
            }
            dy1 = sqrt(dy1);

            odes_.derivatives(x0 + dx, yTemp_, dydx_);
            for (label i=0; i<n_; i++)
            {
                dy_[i] = dydx_[i] - dy_[i]/dx;
            }

            LUBacksubstitute(a_, pivotIndices_, dy_);

            const scalar denom = min(1, dy1 + SMALL);
            scalar dy2 = 0;
            for (label i=0; i<n_; i++)
            {
                // Test of dy_[i] to avoid overflow
                if (mag(dy_[i]) > scale[i]*denom)
                {
                    theta_ = 1;
                    return false;
                }

                dy2 += sqr(dy_[i]/scale[i]);
            }
            dy2 = sqrt(dy2);
            theta_ = dy2/denom;

            if (theta_ > 1)
            {
                return false;
            }
        }

        odes_.derivatives(xnew, yTemp_, dy_);
        LUBacksubstitute(a_, pivotIndices_, dy_);
    }

    for (label i=0; i<n_; i++)
    {
        y[i] = yTemp_[i] + dy_[i];
    }

    return true;
}
Example #25
0
 rref_result ( Input& xpr, base_t tol)
   : tol_(tol)
   , a_(xpr)
   , n_( nt2::height(a_)  )
   , m_( nt2::width(a_)  )
   , jb_(of_size(1, n_))
 {
   BOOST_ASSERT_MSG(ismatrix(a_), "input to rref must be matrix");
   if (tol < Zero<type_t>()) tol = nt2::max(m_,n_)*nt2::Eps<base_t>()*nt2::norm(a_,'I');
   itype_t i = 1, j = 1;
   itype_t k = 0;
   type_t p;
   itype_t cnt = 1;
   while(i <= m_ && j <= n_)
   {
     //          tie(p, k) =  nt2::max(nt2::abs(a_(_(i, m_),j))); //TODO
     p = nt2::max(nt2::abs(a_(_(i, m_),j)))(1);
     for(int l = i; l <= m_; ++l) if (nt2::abs(a_(l, j)) == p) { k = l; break; }
     //k = k+i-1;
     if (p <= tol)
     {
       // the column is negligible, zero it out.
       a_(_(i, m_),j) = nt2::zeros(m_-i+1, 1, meta::as_<type_t>());
       ++j;
     }
     else
     {
       // remember column index
       //jb_ = cath(jb_, j); //TODO
       jb_(cnt) = j; ++cnt;
       // swap i-th and k-th rows.
       tab_t tmp = a_(i, _(j, n_));
       a_(i, _(j, n_)) = a_(k, _(j, n_));
       a_(k, _(j, n_)) = tmp;
       //              a_(cath(i, k),_(j, n)) = a_(cath(k, i),_(j, n));
       // divide the pivot row by the pivot element.
       type_t tmp1 =  a_(i, j);
       a_(i,_(j, n_)) = a_(i,_(j, n_))/tmp1;
       // subtract multiples of the pivot row from all the other rows.
       for (itype_t kk = 1; kk <= m_; ++kk)//[1:i-1 i+1:m]
       {
         if (kk!=i)
         {
           type_t tmp2 = a_(kk,j);
           a_(kk,_(j, n_)) = a_(kk,_(j, n_))- tmp2*a_(i,_(j, n_));
         }
       }
       ++i; ++j;
     }
   }
   jb_ =  nt2::expand(jb_, 1, --cnt);
 }
Example #26
0
int test2(V& v)
{
	typedef typename V::value_type A;
	v.resize(2);
	for (int i = 0; i < 2; i++) {
		v[i] = i;
	}
	std::vector<A> ar({A(10), A(11), A(12), A(13), A(14)});
	v.insert(v.cbegin()+1, ar.begin(), ar.end());

	V ref({A(0), A(10), A(11), A(12), A(13), A(14), A(1)});
	if (!cmp(v, ref)) {
		std::cerr << "Insert begin+1 failed!" << std::endl;
		return 1;
	}

	v.insert(v.cbegin(), ar.begin(), ar.end());
	V ref1({A(10), A(11), A(12), A(13), A(14), A(0), A(10), A(11), A(12), A(13), A(14), A(1)});
	if (!cmp(v, ref1)) {
		std::cerr << "Insert begin failed!" << std::endl;
		return 1;
	}

	v.insert(v.cend(), ar.begin(), ar.end());
	V ref2({A(10), A(11), A(12), A(13), A(14), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14)});
	if (!cmp(v, ref2)) {
		std::cerr << "Insert end failed!" << std::endl;
		return 1;
	}

	v.insert(v.cend(), 2, A(20));
	V ref4({A(10), A(11), A(12), A(13), A(14), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref4)) {
		std::cerr << "Insert (count,value) to the end failed!" << std::endl;
		return 1;
	}

	v.emplace(v.cbegin()+5, 21);
	V ref5({A(10), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref5)) {
		std::cerr << "emplace to begin+5 failed!" << std::endl;
		return 1;
	}

	v.insert(v.cbegin(), 2, A(40));
	V ref6({A(40), A(40), A(10), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref6)) {
		std::cerr << "emplace to begin+5 failed!" << std::endl;
		return 1;
	}

	v.insert(v.cbegin()+1, 2, A(41));
	V ref7({A(40), A(41), A(41), A(40), A(10), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref7)) {
		std::cerr << "emplace to begin+5 failed!" << std::endl;
		return 1;
	}

	v.insert(v.cbegin(), std::move(A(100)));
	V ref8({A(100), A(40), A(41), A(41), A(40), A(10), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref8)) {
		std::cerr << "insert to begin + std::move failed!" << std::endl;
		return 1;
	}

	A a_(101);
	v.insert(v.cbegin()+4, a_);
	V ref9({A(100), A(40), A(41), A(41), A(101), A(40), A(10), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref9)) {
		std::cerr << "insert to begin + copy failed!" << std::endl;
		return 1;
	}

	v.insert(v.cbegin()+7, {A(60), A(61)});
	V ref10({A(100), A(40), A(41), A(41), A(101), A(40), A(10), A(60), A(61), A(11), A(12), A(13), A(14), A(21), A(0), A(10), A(11), A(12), A(13), A(14), A(1), A(10), A(11), A(12), A(13), A(14), A(20), A(20)});
	if (!cmp(v, ref10)) {
		std::cerr << "insert to begin + copy failed!" << std::endl;
		return 1;
	}
	return 0;
}