BasicArray middleRows(int start, int n) {
   BasicArray out;
   out.resize(n, m_nCol);
   for (int i = start; i < start + n; ++i) {
     for (int j = 0; j < m_nCol; ++j) {
       out(i, j) = at(i, j);
     }
   }
   return out;
 }
 BasicArray block(int startRow, int startCol, int nRow, int nCol) const {
   BasicArray out;
   out.resize(nRow, nCol);
   for (int iRow = 0; iRow < nRow; ++iRow) {
     for (int iCol = 0; iCol < nCol; ++iCol) {
       out(iRow, iCol) = at(iRow + startRow, iCol + startCol);
     }
   }
   return out;
 }
Beispiel #3
0
BasicArray<QuadExpr> exprMult(const Eigen::MatrixXd& A, const BasicArray<QuadExpr>& B) {
	BasicArray<QuadExpr> C(A.rows(), B.cols());
	assert(A.cols() == B.rows());
	int m = A.cols();
	for (int i=0; i<A.rows(); i++) {
		for (int j=0; j<B.cols(); j++) {
			C(i,j) = QuadExpr();
			for (int k=0; k<m; k++)
				C(i,j) = C(i,j) + A(i,k)*B(k,j);
		}
	}
	return C;
}
BasicColumn<T>::BasicColumn(Allocator& alloc, ref_type ref)
{
    char* header = alloc.translate(ref);
    bool root_is_leaf = !Array::get_is_inner_bptree_node_from_header(header);
    if (root_is_leaf) {
        BasicArray<T>* root = new BasicArray<T>(alloc); // Throws
        root->init_from_mem(MemRef(header, ref));
        m_array = root;
    }
    else {
        Array* root = new Array(alloc); // Throws
        root->init_from_mem(MemRef(header, ref));
        m_array = root;
    }
}
Beispiel #5
0
 double operator()(BasicArray<double>& vec)
	{
	double ans=0.0;
	for (unsigned int i=0; i<vec.size(); i++)
	  ans += vec[i]*vec[i];
	return ans;
	}
bool BasicArray<T>::compare(const BasicArray<T>& a) const
{
    size_t n = size();
    if (a.size() != n)
        return false;
    const T* data_1 = reinterpret_cast<const T*>(m_data);
    const T* data_2 = reinterpret_cast<const T*>(a.m_data);
    return std::equal(data_1, data_1+n, data_2);
}
Beispiel #7
0
BasicArray::BasicArray(const BasicArray& ba)
{
	size_ = ba.size();
	data_ = new double[size_];
	
	double *pos = ba.data_;
	for (int i = 0; i < size_; ++i,++pos)
	{
		data_[i] = *pos;
	}
}
Beispiel #8
0
//void jj::selectionSort(BasicArray& a){
//	int tmp(0);
//	for ( int i = 0; i < a.size(); ++i)	{
//		int k = i;
//		for (int j = i+1; j < a.size(); ++j){
//			if ( a[j] < a[k] ){
//				k = j;
//			}
//		}
//		tmp = a[k];
//		a[k] = a[i];
//		a[i] = tmp;
//	}
//}
void jj::selectionSort(BasicArray& a)
{
	int i,j,k;
	for(i=0;i<a.size();++i)
	{
		k=i;
		for(j=i+1;j<a.size();++j)
	    {
			if(a[j]<a[k])
				k=j;
		}
		//swap(a[i],a[k]);
		if ( i != k)
		{
			int tmp = a[k];
			a[k] = a[i];
			a[i] = tmp;
		}
		std::cout << a;
	}
}
Beispiel #9
0
/*!
  \brief copy constructor
  
  \param f2  the BasicArray to copy

  \author Philippe Lavoie 
  \date 24 January 1997
*/
template<class T> BasicArray<T>::BasicArray(const BasicArray<T>& f2) 
{
  rsize = sze = 0 ;
  x = 0 ;
  resize(f2.size());
  T *p2,*p1 ;
  p1 = x-1 ;
  p2 = f2.x - 1 ;
  
  for (int k = rsize; k >0; --k)
    *(++p1) = *(++p2) ;
  destruct = 1 ;
}
void chebexp(double (*f)(T), T a, T b, T eps, 
    BasicArray<T> &c, T &err)
{
    int lenc = c.n() ;
    int j, k, l, n;
    T esf, ba, cos2, sin2, wi, ss, x, y, t, h, eref, erefh, errh;

    

    esf = 10;
    ba = T(0.5) * (b - a);
    c[0] = T(0.5) * (*f)(a);
    c[2] = T(0.5) * (*f)(b);
    c[1] = (*f)(a + ba);
    c[lenc - 1] = c[0] - c[2];
    c[lenc] = c[0] + c[2] + c[1];
    c[lenc - 2] = c[0] + c[2] - c[1];
    cos2 = 0;
    sin2 = 1;
    wi = -1;
    h = 1;
    l = 1;
    n = 2;
    eref = erefh = T() ; 
    do {
        ss = 2 * sin2;
        cos2 = sqrt(2 + cos2);
        sin2 /= 2 + cos2;
        x = ba * sin2;
        y = 0;
        for (j = 0; j <= l - 1; j++) {
            x += y;
            y += ss * (ba - x);
            c[j] = (*f)(a + x);
            c[n - 1 - j] = (*f)(b - x);
        }
        wi /= cos2;
        ddct(n, T(0.5) * cos2, wi, c);
        l = n;
        n *= 2;
        for (j = l - 1; j >= 0; j--) {
            k = lenc - j;
            t = c[k] - c[j];
            c[k] += c[j];
            c[lenc - n + j] = t;
        }
        if (n == 4) {
            eref = T(0.25) * (fabs(c[lenc]) + fabs(c[lenc - 1]) + 
                fabs(c[lenc - 2]) + fabs(c[lenc - 3]) + fabs(c[lenc - 4]));
            erefh = eref * sqrt(eps);
            eref *= eps;
            err = erefh;
        }
        h *= T(0.5);
        errh = esf * err;
        err = h * (T(0.5) * fabs(c[lenc - n]) + fabs(c[lenc - n + 1]));
    } while ((err > eref || errh > erefh) && 2 * n + 4 <= lenc);
    c[lenc - n] *= T(0.5);
    c[lenc] *= T(0.5);
    for (j = lenc - n; j <= lenc; j++) {
        c[j] *= h;
    }
    if (err > eref || errh > erefh) {
        err = -(err);
    } else {
        do {
            n -= 2;
            err += fabs(c[lenc - n]) + fabs(c[lenc - n + 1]);
        } while (err < eref && n > 2);
        n += 2;
        err = eref;
    }
    if (ba != 0) {
        c[3] = 1 / ba;
    } else {
        c[3] = 0;
    }
    c[2] = T(0.5) * (b + a);
    c[1] = n + T(0.5);
    c[0] = lenc + T(0.5);
}