コード例 #1
0
ファイル: matrix.hpp プロジェクト: ELoevbak/TWS
    typename std::common_type<typename M1::value_type, typename M2::value_type>::type
    inner_product(const M1& A, const M2& B)
    {
#ifdef UNROLL
        auto s1 = A(0, 0) * B(0, 0);
        auto s2 = A(1, 0) * B(1, 0);
        auto s3 = A(2, 0) * B(2, 0);
        auto s4 = A(3, 0) * B(3, 0);
        for(std::size_t j=0; j < A.cols(); ++j)
        for(std::size_t i=0; i < A.rows(); i+=4)
        {
            s1 += A(i,j) * B(i,j);
            s2 += A(i+1,j) * B(i+1,j);
            s3 += A(i+2,j) * B(i+2,j);
            s4 += A(i+3,j) * B(i+3,j);
        }
        return s1 + s2 + s3 + s4;
#else
        auto s = A(0, 0) * B(0, 0);
        for(std::size_t j=0; j < A.cols(); ++j)
        for(std::size_t i=0; i < A.rows(); ++i)
            s += A(i,j) * B(i,j);
        return s;
#endif
    }
コード例 #2
0
    typename viennacl::enable_if<    viennacl::is_any_dense_nonstructured_matrix<M1>::value
                                  && viennacl::is_any_dense_nonstructured_vector<V1>::value
                                >::type
    inplace_solve(const M1 & mat,
                        V1 & vec,
                  SOLVERTAG)
    {
      assert( (mat.size1() == vec.size()) && bool("Size check failed in inplace_solve(): size1(A) != size(b)"));
      assert( (mat.size2() == vec.size()) && bool("Size check failed in inplace_solve(): size2(A) != size(b)"));
      
      switch (viennacl::traits::handle(mat).get_active_handle_id())
      {
        case viennacl::MAIN_MEMORY:
          viennacl::linalg::host_based::inplace_solve(mat, vec, SOLVERTAG());
          break;
#ifdef VIENNACL_WITH_OPENCL
        case viennacl::OPENCL_MEMORY:
          viennacl::linalg::opencl::inplace_solve(mat, vec, SOLVERTAG());
          break;
#endif
#ifdef VIENNACL_WITH_CUDA
        case viennacl::CUDA_MEMORY:
          viennacl::linalg::cuda::inplace_solve(mat, vec, SOLVERTAG());
          break;
#endif
        default:
          throw "not implemented";
      }
    }
コード例 #3
0
ファイル: ops.cpp プロジェクト: hiraditya/origin
Common_type<Value_type<M1>, Value_type<M2> >
dot_product (const M1 &a, const M2 &b)
{
  static_assert (a.order == 1, "");
  static_assert (b.order == 1, "");
  assert (a.size () == b.size ());
  return inner_product (a.begin (), a.end (), b.begin (), size_t (0));
}
コード例 #4
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::mean(const M1 X, V1 mu) {
  /* pre-condition */
  BI_ASSERT(X.size2() == mu.size());

  const int N = X.size1();
  typename sim_temp_vector<V1>::type w(N);
  set_elements(w, 1.0);
  gemv(1.0/N, X, w, 0.0, mu, 'T');
}
コード例 #5
0
ファイル: matrix_assign.cpp プロジェクト: Aldor007/shark-old
void checkMatrixEqual(M1 const& m1, M2 const& m2){
	BOOST_REQUIRE_EQUAL(m1.size1(),m2.size1());
	BOOST_REQUIRE_EQUAL(m1.size2(),m2.size2());
	for(std::size_t i = 0; i != m2.size1(); ++i){
		for(std::size_t j = 0; j != m2.size2(); ++j){
			BOOST_CHECK_EQUAL(m1(i,j),m2(i,j));
		}
	}
}
コード例 #6
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::mean(const M1 X, const V1 w, V2 mu) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(X.size1() == w.size());

  typedef typename V1::value_type T;

  T Wt = sum_reduce(w);
  gemv(1.0/Wt, X, w, 0.0, mu, 'T');
}
コード例 #7
0
ファイル: gtest_eigen.hpp プロジェクト: DHaylock/grid_map
    void assertFinite(const M1 & A, std::string const & message = "")
    {
      for(int r = 0; r < A.rows(); r++)
		{
		  for(int c = 0; c < A.cols(); c++)
			{
			  ASSERT_TRUE(std::isfinite(A(r,c))) << std::endl << "Check for finite values failed at A(" << r << "," << c << "). Matrix A:" << std::endl << A << std::endl;
			}
		}
    }
コード例 #8
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cov(const M1 X, const V1 mu, M2 Sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(Sigma.size1() == mu.size() && Sigma.size2() == mu.size());

  const int N = X.size1();
  typename sim_temp_matrix<M2>::type Y(X.size1(), X.size2());
  Y = X;
  sub_rows(Y, mu);
  syrk(1.0/(N - 1.0), Y, 0.0, Sigma, 'U', 'T');
}
コード例 #9
0
ファイル: lu_main.cpp プロジェクト: sherryshare/monitor_tools
bool check_Matrix(const M1 & m1, const M2& m2) {
    bool equal = true;
    for(int i = 0; i<m1.M(); i++)
        for(int j = 0; j< m1.N(); j++)
        {
            if(std::abs(m1(i, j) - m2(i, j) ) / std::abs(m2(i, j)) > 0.1)
            {
                equal = false;
            }
        }
    return equal;
}
コード例 #10
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cov(const GammaPdf& q, M1 Sigma) {
  /* pre-condition */
  BI_ASSERT(Sigma.size1() == q.size());
  BI_ASSERT(Sigma.size2() == q.size());

  real alpha = q.shape();
  real beta = q.scale();
  real sigma = alpha*std::pow(beta, 2);

  Sigma.clear();
  set_elements(diagonal(Sigma), sigma);
}
コード例 #11
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::var(const M1 X, const V1 mu, V2 sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(sigma.size() == mu.size());

  const int N = X.size1();
  typename sim_temp_matrix<M1>::type Z(X.size2(), X.size1());
  Z = X;
  sub_rows(Z, mu);
  dot_columns(Z, sigma);
  scal(1.0/(N - 1.0), sigma);
}
コード例 #12
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cov(const UniformPdf<V1>& q, M1 Sigma) {
  /* pre-condition */
  BI_ASSERT(Sigma.size1() == q.size());
  BI_ASSERT(Sigma.size2() == q.size());

  temp_host_vector<real>::type diff(q.size());
  diff = q.upper();
  sub_elements(diff, q.lower(), diff);
  sq_elements(diff, diff);

  Sigma.clear();
  axpy(1.0/12.0, diff, diagonal(Sigma));
}
コード例 #13
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cross(const M1 X, const M2 Y, const V1 muX, const V2 muY,
    M3 SigmaXY) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == muX.size());
  BI_ASSERT(Y.size2() == muY.size());
  BI_ASSERT(X.size1() == Y.size1());
  BI_ASSERT(SigmaXY.size1() == muX.size() && SigmaXY.size2() == muY.size());

  const int N = X.size1();

  gemm(1.0/(N - 1.0), X, Y, 0.0, SigmaXY, 'T', 'N');
  ger(-N/(N - 1.0), muX, muY, SigmaXY);
}
コード例 #14
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cov(const InverseGammaPdf& q, M1 Sigma) {
  /* pre-condition */
  BI_ASSERT(Sigma.size1() == q.size());
  BI_ASSERT(Sigma.size2() == q.size());
  BI_ASSERT(q.shape() > 2.0);

  real alpha = q.shape();
  real beta = q.scale();
  real sigma = std::pow(beta, 2)/(std::pow(alpha - 1.0, 2)*(alpha - 2.0));

  Sigma.clear();
  set_elements(diagonal(Sigma), sigma);
}
コード例 #15
0
ファイル: gtest_eigen.hpp プロジェクト: DHaylock/grid_map
    void expectNear(const M1 & A, const M2 & B, T tolerance, std::string const & message = "")
    {
      EXPECT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      EXPECT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
        {
          for(int c = 0; c < A.cols(); c++)
            {
              EXPECT_NEAR(A(r,c),B(r,c),tolerance) << message << "\nTolerance comparison failed at (" << r << "," << c << ")\n"
												   << "\nMatrix A:\n" << A << "\nand matrix B\n" << B;
            }
        }
    }
コード例 #16
0
ファイル: gtest_eigen.hpp プロジェクト: DHaylock/grid_map
    void assertEqual(const M1 & A, const M2 & B, std::string const & message = "")
    {
        ASSERT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      ASSERT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
		{
		  for(int c = 0; c < A.cols(); c++)
			{
			  ASSERT_EQ(A(r,c),B(r,c)) << message << "\nEquality comparison failed at (" << r << "," << c << ")\n"
                                       << "\nMatrix A:\n" << A << "\nand matrix B\n" << B; 
			}
		}
    }
コード例 #17
0
ファイル: tests.cpp プロジェクト: Karlan88/xray
bool compare_result(const M1& sm, const M2& m)
{
   if(sm.size() != m.size())
      return false;
   if(sm.line() != m.line())
      return false;
   for(unsigned int i = 0; i < sm.size(); ++i)
   {
      if(sm.position(i) != m.position(i))
         return false;
      if(sm.length(i) != m.length(i))
         return false;
   }
   return true;
}
コード例 #18
0
ファイル: gtest_eigen.hpp プロジェクト: DHaylock/grid_map
    void assertNear(const M1 & A, const M2 & B, T tolerance, std::string const & message = "")
    {
      // Note: If these assertions fail, they only abort this subroutine.
      // see: http://code.google.com/p/googletest/wiki/AdvancedGuide#Using_Assertions_in_Sub-routines
      // \todo better handling of this
        ASSERT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      ASSERT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
		{
		  for(int c = 0; c < A.cols(); c++)
			{
			  ASSERT_NEAR(A(r,c),B(r,c),tolerance) << message << "\nTolerance comparison failed at (" << r << "," << c << ")\n"
												   << "\nMatrix A:\n" << A << "\nand matrix B\n" << B; 
			}
		}
    }
コード例 #19
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cov(const M1 X, const V1 w, const V2 mu, M2 Sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(X.size1() == w.size());
  BI_ASSERT(Sigma.size1() == mu.size() && Sigma.size2() == mu.size());

  typedef typename V1::value_type T;
  typename sim_temp_matrix<M2>::type Y(X.size1(), X.size2());
  typename sim_temp_matrix<M2>::type Z(X.size1(), X.size2());
  typename sim_temp_vector<V2>::type v(w.size());

  T Wt = sum_reduce(w);
  Y = X;
  sub_rows(Y, mu);
  sqrt_elements(w, v);
  gdmm(1.0, v, Y, 0.0, Z);
  syrk(1.0/Wt, Z, 0.0, Sigma, 'U', 'T');
  // alternative weight: 1.0/(Wt - W2t/Wt)
}
コード例 #20
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::distance(const M1 X, const real h, M2 D) {
  /* pre-conditions */
  BI_ASSERT(D.size1() == D.size2());
  BI_ASSERT(D.size1() == X.size1());
  BI_ASSERT(!M2::on_device);

  typedef typename M1::value_type T1;

  FastGaussianKernel K(X.size2(), h);
  typename temp_host_vector<T1>::type d(X.size2());
  int i, j;
  for (j = 0; j < D.size2(); ++j) {
    for (i = 0; i <= j; ++i) {
      d = row(X, i);
      axpy(-1.0, row(X, j), d);
      D(i, j) = K(dot(d));
    }
  }
}
コード例 #21
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::var(const M1 X, const V1 w, const V2 mu, V3 sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(X.size1() == w.size());
  BI_ASSERT(sigma.size() == mu.size());

  typedef typename V1::value_type T1;
  typename sim_temp_matrix<M1>::type Z(X.size1(), X.size2());
  typename sim_temp_matrix<M1>::type Y(X.size1(), X.size2());
  typename sim_temp_vector<V2>::type v(w.size());

  T1 Wt = sum_reduce(w);
  Z = X;
  sub_rows(Z, mu);
  sqrt_elements(w, v);
  gdmm(1.0, v, Z, 0.0, Y);
  dot_columns(Y, sigma);
  divscal_elements(sigma, Wt, sigma);
  // alternative weight: 1.0/(Wt - W2t/Wt)
}
コード例 #22
0
ファイル: misc.hpp プロジェクト: milthorpe/LibBi
void bi::cross(const M1 X, const M2 Y, const V1 w, const V2 muX,
    const V3 muY, M3 SigmaXY) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == muX.size());
  BI_ASSERT(Y.size2() == muY.size());
  BI_ASSERT(X.size1() == Y.size1());
  BI_ASSERT(X.size1() == w.size());
  BI_ASSERT(Y.size1() == w.size());
  BI_ASSERT(SigmaXY.size1() == muX.size() && SigmaXY.size2() == muY.size());

  typedef typename V1::value_type T;
  typename sim_temp_matrix<M3>::type Z(X.size1(), X.size2());

  T Wt = sum_reduce(w);
  T Wt2 = std::pow(Wt, 2);
  T W2t = sumsq_reduce(w);

  gdmm(1.0, w, X, 0.0, Z);
  gemm(1.0/Wt, Z, Y, 0.0, SigmaXY, 'T', 'N');
  ger(-1.0, muX, muY, SigmaXY);
  matrix_scal(1.0/(1.0 - W2t/Wt2), SigmaXY);
}
コード例 #23
0
ファイル: primitive.hpp プロジェクト: milthorpe/LibBi
void bi::inverse_gamma_log_densities(const M1 Z, const T1 alpha, const T1 beta,
    V1 p, const bool clear) {
  /* pre-condition */
  BI_ASSERT(Z.size1() == p.size());

  op_elements(vec(Z), vec(Z), inverse_gamma_log_density_functor<T1>(alpha, beta));
  if (clear) {
    sum_columns(Z, p);
  } else {
    typename sim_temp_vector<V1>::type p1(p.size());
    sum_columns(Z, p1);
    add_elements(p, p1, p);
  }
}
コード例 #24
0
ファイル: mem.cpp プロジェクト: Sugarsplash/ece485
void print_m2_valid_map(M1 M1array)
{
    int line = 0x54;

    printf("%02X\t", line);

    int data[16];

    M1array.read(line, data);

    for (int bit = 15; bit >= 0; --bit)
    {
        printf("%d ", data[bit]);
    }
}
コード例 #25
0
ファイル: primitive.hpp プロジェクト: milthorpe/LibBi
void bi::gaussian_log_densities(const M1 Z, const T1 logZ, V1 p,
    const bool clear) {
  /* pre-condition */
  BI_ASSERT(Z.size1() == p.size());

  typedef typename V1::value_type T2;

  if (clear) {
    dot_rows(Z, p);
    op_elements(p, p, gaussian_log_density_functor<T2>(logZ));
  } else {
    typename sim_temp_vector<V1>::type p1(p.size());
    dot_rows(Z, p1);
    op_elements(p1, p, p, gaussian_log_density_update_functor<T2>(logZ));
  }
}
コード例 #26
0
ファイル: mem.cpp プロジェクト: Sugarsplash/ece485
void print_m3_valid_map(M1 M1array)
{
    for (int line = 0x50; line < 0x54; ++line)       // Line
    {
        printf("%02X\t", line);

        int data[16];

        M1array.read(line, data);

        for (int bit = 15; bit >= 0; --bit)
        {
            printf("%d ", data[bit]);
        }

        printf("\n");
    }
}
コード例 #27
0
ファイル: lu_main.cpp プロジェクト: sherryshare/monitor_tools
void check_LU_res(const M1 & m, const M2& lu)
{
    GeneralMatrix l(m.M(), m.N());
    GeneralMatrix u(m.M(), m.N());
    for(int i = 0; i < lu.M(); i++)
    {
        for(int j = 0; j< lu.N(); j++)
        {
            if(i>j)
            {
                l(i, j) = lu(i, j);
                u(i, j) = 0;
            }
            else if(i == j)
            {
                l(i, j) = 1;
                u(i, j) = lu(i, j);
            }
            else
            {
                l(i, j) = 0;
                u(i, j) = lu(i, j);
            }
        }
    }

    bool equal = true;
    GeneralMatrix m1(m.M(), m.N());
    mul(l, u, m1);
    for(int i = 0; i<m.M(); i++)
        for(int j = 0; j< m.N(); j++)
        {
            if(std::abs(m1(i, j) - m(i, j) ) / m(i, j) > 0.1)
            {
                equal = false;
            }
        }
    if(!check_Matrix(m1,m))
    {
        std::cout<<"wrong answer!"<<std::endl;
    }
    else
    {
        std::cout<<"right answer, wahahahaha!"<<std::endl;
    }
}
コード例 #28
0
ファイル: mem.cpp プロジェクト: Sugarsplash/ece485
void print_m1_memory(M1 M1array)
{
    for (int line = 0; line < 0x50; ++line)       // Line
    {
        printf("%02X\t", line);

        int data[16];

        M1array.read(line, data);

        for (int bit = 15; bit >= 0; --bit)
        {
            printf("%d", data[bit]);

            // Add spacing between fields (type, x, tag, next, x)
            if (bit == 14 || bit == 8 || bit == 9 || bit == 1)
            {
                printf(" ");
            }
        }

        printf("\n");
    }
}
コード例 #29
0
ファイル: TMV_TestTriAlias.cpp プロジェクト: rmjarvis/tmv
static void TestAliasMultUL1(const M& m, M1& m1, std::string label)
{
    TestAliasMultUL2(m,m.upperTri(),m.upperTri(),
                     m1,m1.upperTri(),m1.upperTri(),
                     label+" upperTri,upperTri");
    TestAliasMultUL2(m,m.upperTri(),m.lowerTri(),
                     m1,m1.upperTri(),m1.lowerTri(),
                     label+" upperTri,lowerTri");
    TestAliasMultUL2(m,m.lowerTri(),m.upperTri(),
                     m1,m1.lowerTri(),m1.upperTri(),
                     label+" lowerTri,upperTri");
    TestAliasMultUL2(m,m.lowerTri(),m.lowerTri(),
                     m1,m1.lowerTri(),m1.lowerTri(),
                     label+" lowerTri,lowerTri");

    TestAliasMultUL2(m,m.unitUpperTri(),m.upperTri(),
                     m1,m1.unitUpperTri(),m1.upperTri(),
                     label+" unitUpperTri,upperTri");
    TestAliasMultUL2(m,m.unitUpperTri(),m.lowerTri(),
                     m1,m1.unitUpperTri(),m1.lowerTri(),
                     label+" unitUpperTri,lowerTri");
    TestAliasMultUL2(m,m.unitLowerTri(),m.upperTri(),
                     m1,m1.unitLowerTri(),m1.upperTri(),
                     label+" unitLowerTri,upperTri");
    TestAliasMultUL2(m,m.unitLowerTri(),m.lowerTri(),
                     m1,m1.unitLowerTri(),m1.lowerTri(),
                     label+" unitLowerTri,lowerTri");

    TestAliasMultUL2(m,m.upperTri(),m.unitUpperTri(),
                     m1,m1.upperTri(),m1.unitUpperTri(),
                     label+" upperTri,unitUpperTri");
    TestAliasMultUL2(m,m.upperTri(),m.unitLowerTri(),
                     m1,m1.upperTri(),m1.unitLowerTri(),
                     label+" upperTri,unitLowerTri");
    TestAliasMultUL2(m,m.lowerTri(),m.unitUpperTri(),
                     m1,m1.lowerTri(),m1.unitUpperTri(),
                     label+" lowerTri,unitUpperTri");
    TestAliasMultUL2(m,m.lowerTri(),m.unitLowerTri(),
                     m1,m1.lowerTri(),m1.unitLowerTri(),
                     label+" lowerTri,unitLowerTri");

    TestAliasMultUL2(m,m.unitUpperTri(),m.unitUpperTri(),
                     m1,m1.unitUpperTri(),m1.unitUpperTri(),
                     label+" unitUpperTri,unitUpperTri");
    TestAliasMultUL2(m,m.unitUpperTri(),m.unitLowerTri(),
                     m1,m1.unitUpperTri(),m1.unitLowerTri(),
                     label+" unitUpperTri,unitLowerTri");
    TestAliasMultUL2(m,m.unitLowerTri(),m.unitUpperTri(),
                     m1,m1.unitLowerTri(),m1.unitUpperTri(),
                     label+" unitLowerTri,unitUpperTri");
    TestAliasMultUL2(m,m.unitLowerTri(),m.unitLowerTri(),
                     m1,m1.unitLowerTri(),m1.unitLowerTri(),
                     label+" unitLowerTri,unitLowerTri");
}
コード例 #30
0
ファイル: matrix_proxy.cpp プロジェクト: Shark-ML/Shark
void checkDenseMatrixEqual(M1 const& m1, M2 const& m2){
	BOOST_REQUIRE_EQUAL(m1.size1(),m2.size1());
	BOOST_REQUIRE_EQUAL(m1.size2(),m2.size2());
	//indexed access
	for(std::size_t i = 0; i != m2.size1(); ++i){
		for(std::size_t j = 0; j != m2.size2(); ++j){
			BOOST_CHECK_EQUAL(m1(i,j),m2(i,j));
		}
	}
	//iterator access rows
	for(std::size_t i = 0; i != m2.size1(); ++i){
		typedef typename M1::const_row_iterator Iter;
		BOOST_REQUIRE_EQUAL(m1.row_end(i)-m1.row_begin(i), m1.size2());
		std::size_t k = 0;
		for(Iter it = m1.row_begin(i); it != m1.row_end(i); ++it,++k){
			BOOST_CHECK_EQUAL(k,it.index());
			BOOST_CHECK_EQUAL(*it,m2(i,k));
		}
		//test that the actual iterated length equals the number of elements
		BOOST_CHECK_EQUAL(k, m1.size2());
	}
	//iterator access columns
	for(std::size_t i = 0; i != m2.size2(); ++i){
		typedef typename M1::const_column_iterator Iter;
		BOOST_REQUIRE_EQUAL(m1.column_end(i)-m1.column_begin(i), m1.size1());
		std::size_t k = 0;
		for(Iter it = m1.column_begin(i); it != m1.column_end(i); ++it,++k){
			BOOST_CHECK_EQUAL(k,it.index());
			BOOST_CHECK_EQUAL(*it,m2(k,i));
		}
		//test that the actual iterated length equals the number of elements
		BOOST_CHECK_EQUAL(k, m1.size1());
	}
}