Disabled external gits
This commit is contained in:
		
							
								
								
									
										2
									
								
								cs440-acg/ext/eigen/doc/examples/.krazy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								cs440-acg/ext/eigen/doc/examples/.krazy
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
EXCLUDE copyright
 | 
			
		||||
EXCLUDE license
 | 
			
		||||
							
								
								
									
										21
									
								
								cs440-acg/ext/eigen/doc/examples/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								cs440-acg/ext/eigen/doc/examples/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
file(GLOB examples_SRCS "*.cpp")
 | 
			
		||||
 | 
			
		||||
foreach(example_src ${examples_SRCS})
 | 
			
		||||
  get_filename_component(example ${example_src} NAME_WE)
 | 
			
		||||
  add_executable(${example} ${example_src})
 | 
			
		||||
  if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
 | 
			
		||||
    target_link_libraries(${example} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
 | 
			
		||||
  endif()
 | 
			
		||||
  add_custom_command(
 | 
			
		||||
    TARGET ${example}
 | 
			
		||||
    POST_BUILD
 | 
			
		||||
    COMMAND ${example}
 | 
			
		||||
    ARGS >${CMAKE_CURRENT_BINARY_DIR}/${example}.out
 | 
			
		||||
  )
 | 
			
		||||
  add_dependencies(all_examples ${example})
 | 
			
		||||
endforeach(example_src)
 | 
			
		||||
 | 
			
		||||
check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11)
 | 
			
		||||
if(EIGEN_COMPILER_SUPPORT_CPP11)
 | 
			
		||||
ei_add_target_property(nullary_indexing COMPILE_FLAGS "-std=c++11")
 | 
			
		||||
endif()
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
class MyVectorType : public Eigen::VectorXd
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    MyVectorType(void):Eigen::VectorXd() {}
 | 
			
		||||
 | 
			
		||||
    // This constructor allows you to construct MyVectorType from Eigen expressions
 | 
			
		||||
    template<typename OtherDerived>
 | 
			
		||||
    MyVectorType(const Eigen::MatrixBase<OtherDerived>& other)
 | 
			
		||||
        : Eigen::VectorXd(other)
 | 
			
		||||
    { }
 | 
			
		||||
 | 
			
		||||
    // This method allows you to assign Eigen expressions to MyVectorType
 | 
			
		||||
    template<typename OtherDerived>
 | 
			
		||||
    MyVectorType& operator=(const Eigen::MatrixBase <OtherDerived>& other)
 | 
			
		||||
    {
 | 
			
		||||
        this->Eigen::VectorXd::operator=(other);
 | 
			
		||||
        return *this;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MyVectorType v = MyVectorType::Ones(4);
 | 
			
		||||
  v(2) += 10;
 | 
			
		||||
  v = 2 * v;
 | 
			
		||||
  std::cout << v.transpose() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_erf.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_erf.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <unsupported/Eigen/SpecialFunctions>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Array4d v(-0.5,2,0,-7);
 | 
			
		||||
  std::cout << v.erf() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_erfc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_erfc.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <unsupported/Eigen/SpecialFunctions>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Array4d v(-0.5,2,0,-7);
 | 
			
		||||
  std::cout << v.erfc() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_lgamma.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								cs440-acg/ext/eigen/doc/examples/Cwise_lgamma.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <unsupported/Eigen/SpecialFunctions>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Array4d v(0.5,10,0,-1);
 | 
			
		||||
  std::cout << v.lgamma() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int const N = 5;
 | 
			
		||||
    MatrixXi A(N,N);
 | 
			
		||||
    A.setRandom();
 | 
			
		||||
    cout << "A =\n" << A << '\n' << endl;
 | 
			
		||||
    cout << "A(1..3,:) =\n" << A.middleCols(1,3) << endl;
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int const N = 5;
 | 
			
		||||
    MatrixXi A(N,N);
 | 
			
		||||
    A.setRandom();
 | 
			
		||||
    cout << "A =\n" << A << '\n' << endl;
 | 
			
		||||
    cout << "A(2..3,:) =\n" << A.middleRows(2,2) << endl;
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int const N = 5;
 | 
			
		||||
    MatrixXi A(N,N);
 | 
			
		||||
    A.setRandom();
 | 
			
		||||
    cout << "A =\n" << A << '\n' << endl;
 | 
			
		||||
    cout << "A(:,1..3) =\n" << A.middleCols<3>(1) << endl;
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
    int const N = 5;
 | 
			
		||||
    MatrixXi A(N,N);
 | 
			
		||||
    A.setRandom();
 | 
			
		||||
    cout << "A =\n" << A << '\n' << endl;
 | 
			
		||||
    cout << "A(1..3,:) =\n" << A.middleRows<3>(1) << endl;
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								cs440-acg/ext/eigen/doc/examples/QuickStart_example.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								cs440-acg/ext/eigen/doc/examples/QuickStart_example.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using Eigen::MatrixXd;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXd m(2,2);
 | 
			
		||||
  m(0,0) = 3;
 | 
			
		||||
  m(1,0) = 2.5;
 | 
			
		||||
  m(0,1) = -1;
 | 
			
		||||
  m(1,1) = m(1,0) + m(0,1);
 | 
			
		||||
  std::cout << m << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXd m = MatrixXd::Random(3,3);
 | 
			
		||||
  m = (m + MatrixXd::Constant(3,3,1.2)) * 50;
 | 
			
		||||
  cout << "m =" << endl << m << endl;
 | 
			
		||||
  VectorXd v(3);
 | 
			
		||||
  v << 1, 2, 3;
 | 
			
		||||
  cout << "m * v =" << endl << m * v << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix3d m = Matrix3d::Random();
 | 
			
		||||
  m = (m + Matrix3d::Constant(1.2)) * 50;
 | 
			
		||||
  cout << "m =" << endl << m << endl;
 | 
			
		||||
  Vector3d v(1,2,3);
 | 
			
		||||
  
 | 
			
		||||
  cout << "m * v =" << endl << m * v << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
template <typename Derived1, typename Derived2>
 | 
			
		||||
void copyUpperTriangularPart(MatrixBase<Derived1>& dst, const MatrixBase<Derived2>& src)
 | 
			
		||||
{
 | 
			
		||||
  /* Note the 'template' keywords in the following line! */
 | 
			
		||||
  dst.template triangularView<Upper>() = src.template triangularView<Upper>();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXi m1 = MatrixXi::Ones(5,5);
 | 
			
		||||
  MatrixXi m2 = MatrixXi::Random(4,4);
 | 
			
		||||
  std::cout << "m2 before copy:" << std::endl;
 | 
			
		||||
  std::cout << m2 << std::endl << std::endl;
 | 
			
		||||
  copyUpperTriangularPart(m2, m1.topLeftCorner(4,4));
 | 
			
		||||
  std::cout << "m2 after copy:" << std::endl;
 | 
			
		||||
  std::cout << m2 << std::endl << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								cs440-acg/ext/eigen/doc/examples/TemplateKeyword_simple.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								cs440-acg/ext/eigen/doc/examples/TemplateKeyword_simple.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
void copyUpperTriangularPart(MatrixXf& dst, const MatrixXf& src)
 | 
			
		||||
{
 | 
			
		||||
  dst.triangularView<Upper>() = src.triangularView<Upper>();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXf m1 = MatrixXf::Ones(4,4);
 | 
			
		||||
  MatrixXf m2 = MatrixXf::Random(4,4);
 | 
			
		||||
  std::cout << "m2 before copy:" << std::endl;
 | 
			
		||||
  std::cout << m2 << std::endl << std::endl;
 | 
			
		||||
  copyUpperTriangularPart(m2, m1);
 | 
			
		||||
  std::cout << "m2 after copy:" << std::endl;
 | 
			
		||||
  std::cout << m2 << std::endl << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								cs440-acg/ext/eigen/doc/examples/TutorialInplaceLU.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								cs440-acg/ext/eigen/doc/examples/TutorialInplaceLU.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
struct init {
 | 
			
		||||
  init() { std::cout << "[" << "init" << "]" << std::endl; }
 | 
			
		||||
};
 | 
			
		||||
init init_obj;
 | 
			
		||||
// [init]
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXd A(2,2);
 | 
			
		||||
  A << 2, -1, 1, 3;
 | 
			
		||||
  cout << "Here is the input matrix A before decomposition:\n" << A << endl;
 | 
			
		||||
cout << "[init]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[declaration]" << endl;
 | 
			
		||||
  PartialPivLU<Ref<MatrixXd> > lu(A);
 | 
			
		||||
  cout << "Here is the input matrix A after decomposition:\n" << A << endl;
 | 
			
		||||
cout << "[declaration]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[matrixLU]" << endl;
 | 
			
		||||
  cout << "Here is the matrix storing the L and U factors:\n" << lu.matrixLU() << endl;
 | 
			
		||||
cout << "[matrixLU]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[solve]" << endl;
 | 
			
		||||
  MatrixXd A0(2,2); A0 << 2, -1, 1, 3;
 | 
			
		||||
  VectorXd b(2);    b << 1, 2;
 | 
			
		||||
  VectorXd x = lu.solve(b);
 | 
			
		||||
  cout << "Residual: " << (A0 * x - b).norm() << endl;
 | 
			
		||||
cout << "[solve]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[modifyA]" << endl;
 | 
			
		||||
  A << 3, 4, -2, 1;
 | 
			
		||||
  x = lu.solve(b);
 | 
			
		||||
  cout << "Residual: " << (A0 * x - b).norm() << endl;
 | 
			
		||||
cout << "[modifyA]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[recompute]" << endl;
 | 
			
		||||
  A0 = A; // save A
 | 
			
		||||
  lu.compute(A);
 | 
			
		||||
  x = lu.solve(b);
 | 
			
		||||
  cout << "Residual: " << (A0 * x - b).norm() << endl;
 | 
			
		||||
cout << "[recompute]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[recompute_bis0]" << endl;
 | 
			
		||||
  MatrixXd A1(2,2);
 | 
			
		||||
  A1 << 5,-2,3,4;
 | 
			
		||||
  lu.compute(A1);
 | 
			
		||||
  cout << "Here is the input matrix A1 after decomposition:\n" << A1 << endl;
 | 
			
		||||
cout << "[recompute_bis0]" << endl;
 | 
			
		||||
 | 
			
		||||
cout << "[recompute_bis1]" << endl;
 | 
			
		||||
  x = lu.solve(b);
 | 
			
		||||
  cout << "Residual: " << (A1 * x - b).norm() << endl;
 | 
			
		||||
cout << "[recompute_bis1]" << endl;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix2f A, b;
 | 
			
		||||
   LLT<Matrix2f> llt;
 | 
			
		||||
   A << 2, -1, -1, 3;
 | 
			
		||||
   b << 1, 2, 3, 1;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   cout << "Here is the right hand side b:\n" << b << endl;
 | 
			
		||||
   cout << "Computing LLT decomposition..." << endl;
 | 
			
		||||
   llt.compute(A);
 | 
			
		||||
   cout << "The solution is:\n" << llt.solve(b) << endl;
 | 
			
		||||
   A(1,1)++;
 | 
			
		||||
   cout << "The matrix A is now:\n" << A << endl;
 | 
			
		||||
   cout << "Computing LLT decomposition..." << endl;
 | 
			
		||||
   llt.compute(A);
 | 
			
		||||
   cout << "The solution is now:\n" << llt.solve(b) << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   MatrixXd A = MatrixXd::Random(100,100);
 | 
			
		||||
   MatrixXd b = MatrixXd::Random(100,50);
 | 
			
		||||
   MatrixXd x = A.fullPivLu().solve(b);
 | 
			
		||||
   double relative_error = (A*x - b).norm() / b.norm(); // norm() is L2 norm
 | 
			
		||||
   cout << "The relative error is:\n" << relative_error << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix3f A;
 | 
			
		||||
   Vector3f b;
 | 
			
		||||
   A << 1,2,3,  4,5,6,  7,8,10;
 | 
			
		||||
   b << 3, 3, 4;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   cout << "Here is the vector b:\n" << b << endl;
 | 
			
		||||
   Vector3f x = A.colPivHouseholderQr().solve(b);
 | 
			
		||||
   cout << "The solution is:\n" << x << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix2f A, b;
 | 
			
		||||
   A << 2, -1, -1, 3;
 | 
			
		||||
   b << 1, 2, 3, 1;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   cout << "Here is the right hand side b:\n" << b << endl;
 | 
			
		||||
   Matrix2f x = A.ldlt().solve(b);
 | 
			
		||||
   cout << "The solution is:\n" << x << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix3f A;
 | 
			
		||||
   A << 1, 2, 1,
 | 
			
		||||
        2, 1, 0,
 | 
			
		||||
        -1, 1, 2;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   cout << "The determinant of A is " << A.determinant() << endl;
 | 
			
		||||
   cout << "The inverse of A is:\n" << A.inverse() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix3f A;
 | 
			
		||||
   A << 1, 2, 5,
 | 
			
		||||
        2, 1, 4,
 | 
			
		||||
        3, 0, 3;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   FullPivLU<Matrix3f> lu_decomp(A);
 | 
			
		||||
   cout << "The rank of A is " << lu_decomp.rank() << endl;
 | 
			
		||||
   cout << "Here is a matrix whose columns form a basis of the null-space of A:\n"
 | 
			
		||||
        << lu_decomp.kernel() << endl;
 | 
			
		||||
   cout << "Here is a matrix whose columns form a basis of the column-space of A:\n"
 | 
			
		||||
        << lu_decomp.image(A) << endl; // yes, have to pass the original A
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								cs440-acg/ext/eigen/doc/examples/TutorialLinAlgSVDSolve.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								cs440-acg/ext/eigen/doc/examples/TutorialLinAlgSVDSolve.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   MatrixXf A = MatrixXf::Random(3, 2);
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   VectorXf b = VectorXf::Random(3);
 | 
			
		||||
   cout << "Here is the right hand side b:\n" << b << endl;
 | 
			
		||||
   cout << "The least-squares solution is:\n"
 | 
			
		||||
        << A.bdcSvd(ComputeThinU | ComputeThinV).solve(b) << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix2f A;
 | 
			
		||||
   A << 1, 2, 2, 3;
 | 
			
		||||
   cout << "Here is the matrix A:\n" << A << endl;
 | 
			
		||||
   SelfAdjointEigenSolver<Matrix2f> eigensolver(A);
 | 
			
		||||
   if (eigensolver.info() != Success) abort();
 | 
			
		||||
   cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl;
 | 
			
		||||
   cout << "Here's a matrix whose columns are eigenvectors of A \n"
 | 
			
		||||
        << "corresponding to these eigenvalues:\n"
 | 
			
		||||
        << eigensolver.eigenvectors() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix2d A;
 | 
			
		||||
   A << 2, 1,
 | 
			
		||||
        2, 0.9999999999;
 | 
			
		||||
   FullPivLU<Matrix2d> lu(A);
 | 
			
		||||
   cout << "By default, the rank of A is found to be " << lu.rank() << endl;
 | 
			
		||||
   lu.setThreshold(1e-5);
 | 
			
		||||
   cout << "With threshold 1e-5, the rank of A is found to be " << lu.rank() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  ArrayXXf  m(2,2);
 | 
			
		||||
  
 | 
			
		||||
  // assign some values coefficient by coefficient
 | 
			
		||||
  m(0,0) = 1.0; m(0,1) = 2.0;
 | 
			
		||||
  m(1,0) = 3.0; m(1,1) = m(0,1) + m(1,0);
 | 
			
		||||
  
 | 
			
		||||
  // print values to standard output
 | 
			
		||||
  cout << m << endl << endl;
 | 
			
		||||
 
 | 
			
		||||
  // using the comma-initializer is also allowed
 | 
			
		||||
  m << 1.0,2.0,
 | 
			
		||||
       3.0,4.0;
 | 
			
		||||
     
 | 
			
		||||
  // print values to standard output
 | 
			
		||||
  cout << m << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  ArrayXXf a(3,3);
 | 
			
		||||
  ArrayXXf b(3,3);
 | 
			
		||||
  a << 1,2,3,
 | 
			
		||||
       4,5,6,
 | 
			
		||||
       7,8,9;
 | 
			
		||||
  b << 1,2,3,
 | 
			
		||||
       1,2,3,
 | 
			
		||||
       1,2,3;
 | 
			
		||||
       
 | 
			
		||||
  // Adding two arrays
 | 
			
		||||
  cout << "a + b = " << endl << a + b << endl << endl;
 | 
			
		||||
 | 
			
		||||
  // Subtracting a scalar from an array
 | 
			
		||||
  cout << "a - 2 = " << endl << a - 2 << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  ArrayXf a = ArrayXf::Random(5);
 | 
			
		||||
  a *= 2;
 | 
			
		||||
  cout << "a =" << endl 
 | 
			
		||||
       << a << endl;
 | 
			
		||||
  cout << "a.abs() =" << endl 
 | 
			
		||||
       << a.abs() << endl;
 | 
			
		||||
  cout << "a.abs().sqrt() =" << endl 
 | 
			
		||||
       << a.abs().sqrt() << endl;
 | 
			
		||||
  cout << "a.min(a.abs().sqrt()) =" << endl 
 | 
			
		||||
       << a.min(a.abs().sqrt()) << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXf m(2,2);
 | 
			
		||||
  MatrixXf n(2,2);
 | 
			
		||||
  MatrixXf result(2,2);
 | 
			
		||||
 | 
			
		||||
  m << 1,2,
 | 
			
		||||
       3,4;
 | 
			
		||||
  n << 5,6,
 | 
			
		||||
       7,8;
 | 
			
		||||
  
 | 
			
		||||
  result = (m.array() + 4).matrix() * m;
 | 
			
		||||
  cout << "-- Combination 1: --" << endl << result << endl << endl;
 | 
			
		||||
  result = (m.array() * n.array()).matrix() * m;
 | 
			
		||||
  cout << "-- Combination 2: --" << endl << result << endl << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXf m(2,2);
 | 
			
		||||
  MatrixXf n(2,2);
 | 
			
		||||
  MatrixXf result(2,2);
 | 
			
		||||
 | 
			
		||||
  m << 1,2,
 | 
			
		||||
       3,4;
 | 
			
		||||
  n << 5,6,
 | 
			
		||||
       7,8;
 | 
			
		||||
 | 
			
		||||
  result = m * n;
 | 
			
		||||
  cout << "-- Matrix m*n: --" << endl << result << endl << endl;
 | 
			
		||||
  result = m.array() * n.array();
 | 
			
		||||
  cout << "-- Array m*n: --" << endl << result << endl << endl;
 | 
			
		||||
  result = m.cwiseProduct(n);
 | 
			
		||||
  cout << "-- With cwiseProduct: --" << endl << result << endl << endl;
 | 
			
		||||
  result = m.array() + 4;
 | 
			
		||||
  cout << "-- Array m + 4: --" << endl << result << endl << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  ArrayXXf a(2,2);
 | 
			
		||||
  ArrayXXf b(2,2);
 | 
			
		||||
  a << 1,2,
 | 
			
		||||
       3,4;
 | 
			
		||||
  b << 5,6,
 | 
			
		||||
       7,8;
 | 
			
		||||
  cout << "a * b = " << endl << a * b << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Array22f m;
 | 
			
		||||
  m << 1,2,
 | 
			
		||||
       3,4;
 | 
			
		||||
  Array44f a = Array44f::Constant(0.6);
 | 
			
		||||
  cout << "Here is the array a:" << endl << a << endl << endl;
 | 
			
		||||
  a.block<2,2>(1,1) = m;
 | 
			
		||||
  cout << "Here is now a with m copied into its central 2x2 block:" << endl << a << endl << endl;
 | 
			
		||||
  a.block(0,0,2,3) = a.block(2,1,2,3);
 | 
			
		||||
  cout << "Here is now a with bottom-right 2x3 block copied into top-left 2x3 block:" << endl << a << endl << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf m(3,3);
 | 
			
		||||
  m << 1,2,3,
 | 
			
		||||
       4,5,6,
 | 
			
		||||
       7,8,9;
 | 
			
		||||
  cout << "Here is the matrix m:" << endl << m << endl;
 | 
			
		||||
  cout << "2nd Row: " << m.row(1) << endl;
 | 
			
		||||
  m.col(2) += 3 * m.col(0);
 | 
			
		||||
  cout << "After adding 3 times the first column into the third column, the matrix m is:\n";
 | 
			
		||||
  cout << m << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::Matrix4f m;
 | 
			
		||||
  m << 1, 2, 3, 4,
 | 
			
		||||
       5, 6, 7, 8,
 | 
			
		||||
       9, 10,11,12,
 | 
			
		||||
       13,14,15,16;
 | 
			
		||||
  cout << "m.leftCols(2) =" << endl << m.leftCols(2) << endl << endl;
 | 
			
		||||
  cout << "m.bottomRows<2>() =" << endl << m.bottomRows<2>() << endl << endl;
 | 
			
		||||
  m.topLeftCorner(1,3) = m.bottomRightCorner(3,1).transpose();
 | 
			
		||||
  cout << "After assignment, m = " << endl << m << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf m(4,4);
 | 
			
		||||
  m <<  1, 2, 3, 4,
 | 
			
		||||
        5, 6, 7, 8,
 | 
			
		||||
        9,10,11,12,
 | 
			
		||||
       13,14,15,16;
 | 
			
		||||
  cout << "Block in the middle" << endl;
 | 
			
		||||
  cout << m.block<2,2>(1,1) << endl << endl;
 | 
			
		||||
  for (int i = 1; i <= 3; ++i)
 | 
			
		||||
  {
 | 
			
		||||
    cout << "Block of size " << i << "x" << i << endl;
 | 
			
		||||
    cout << m.block(0,0,i,i) << endl << endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::ArrayXf v(6);
 | 
			
		||||
  v << 1, 2, 3, 4, 5, 6;
 | 
			
		||||
  cout << "v.head(3) =" << endl << v.head(3) << endl << endl;
 | 
			
		||||
  cout << "v.tail<3>() = " << endl << v.tail<3>() << endl << endl;
 | 
			
		||||
  v.segment(1,4) *= 2;
 | 
			
		||||
  cout << "after 'v.segment(1,4) *= 2', v =" << endl << v << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <Eigen/LU>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
   Matrix3f A;
 | 
			
		||||
   Vector3f b;
 | 
			
		||||
   A << 1,2,3,  4,5,6,  7,8,10;
 | 
			
		||||
   b << 3, 3, 4;
 | 
			
		||||
   cout << "Here is the matrix A:" << endl << A << endl;
 | 
			
		||||
   cout << "Here is the vector b:" << endl << b << endl;
 | 
			
		||||
   Vector3f x = A.lu().solve(b);
 | 
			
		||||
   cout << "The solution is:" << endl << x << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,24 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf m(2,4);
 | 
			
		||||
  Eigen::VectorXf v(2);
 | 
			
		||||
  
 | 
			
		||||
  m << 1, 23, 6, 9,
 | 
			
		||||
       3, 11, 7, 2;
 | 
			
		||||
       
 | 
			
		||||
  v << 2,
 | 
			
		||||
       3;
 | 
			
		||||
 | 
			
		||||
  MatrixXf::Index index;
 | 
			
		||||
  // find nearest neighbour
 | 
			
		||||
  (m.colwise() - v).colwise().squaredNorm().minCoeff(&index);
 | 
			
		||||
 | 
			
		||||
  cout << "Nearest neighbour is column " << index << ":" << endl;
 | 
			
		||||
  cout << m.col(index) << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf mat(2,4);
 | 
			
		||||
  Eigen::VectorXf v(2);
 | 
			
		||||
  
 | 
			
		||||
  mat << 1, 2, 6, 9,
 | 
			
		||||
         3, 1, 7, 2;
 | 
			
		||||
         
 | 
			
		||||
  v << 0,
 | 
			
		||||
       1;
 | 
			
		||||
       
 | 
			
		||||
  //add v to each column of m
 | 
			
		||||
  mat.colwise() += v;
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "Broadcasting result: " << std::endl;
 | 
			
		||||
  std::cout << mat << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf mat(2,4);
 | 
			
		||||
  Eigen::VectorXf v(4);
 | 
			
		||||
  
 | 
			
		||||
  mat << 1, 2, 6, 9,
 | 
			
		||||
         3, 1, 7, 2;
 | 
			
		||||
         
 | 
			
		||||
  v << 0,1,2,3;
 | 
			
		||||
       
 | 
			
		||||
  //add v to each row of m
 | 
			
		||||
  mat.rowwise() += v.transpose();
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "Broadcasting result: " << std::endl;
 | 
			
		||||
  std::cout << mat << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf mat(2,4);
 | 
			
		||||
  mat << 1, 2, 6, 9,
 | 
			
		||||
         3, 1, 7, 2;
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "Column's maximum: " << std::endl
 | 
			
		||||
   << mat.colwise().maxCoeff() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXf mat(2,4);
 | 
			
		||||
  mat << 1, 2, 6, 9,
 | 
			
		||||
         3, 1, 7, 2;
 | 
			
		||||
  
 | 
			
		||||
  MatrixXf::Index   maxIndex;
 | 
			
		||||
  float maxNorm = mat.colwise().sum().maxCoeff(&maxIndex);
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "Maximum sum at position " << maxIndex << std::endl;
 | 
			
		||||
 | 
			
		||||
  std::cout << "The corresponding vector is: " << std::endl;
 | 
			
		||||
  std::cout << mat.col( maxIndex ) << std::endl;
 | 
			
		||||
  std::cout << "And its sum is is: " << maxNorm << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  ArrayXXf a(2,2);
 | 
			
		||||
  
 | 
			
		||||
  a << 1,2,
 | 
			
		||||
       3,4;
 | 
			
		||||
 | 
			
		||||
  cout << "(a > 0).all()   = " << (a > 0).all() << endl;
 | 
			
		||||
  cout << "(a > 0).any()   = " << (a > 0).any() << endl;
 | 
			
		||||
  cout << "(a > 0).count() = " << (a > 0).count() << endl;
 | 
			
		||||
  cout << endl;
 | 
			
		||||
  cout << "(a > 2).all()   = " << (a > 2).all() << endl;
 | 
			
		||||
  cout << "(a > 2).any()   = " << (a > 2).any() << endl;
 | 
			
		||||
  cout << "(a > 2).count() = " << (a > 2).count() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,28 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  VectorXf v(2);
 | 
			
		||||
  MatrixXf m(2,2), n(2,2);
 | 
			
		||||
  
 | 
			
		||||
  v << -1,
 | 
			
		||||
       2;
 | 
			
		||||
  
 | 
			
		||||
  m << 1,-2,
 | 
			
		||||
       -3,4;
 | 
			
		||||
 | 
			
		||||
  cout << "v.squaredNorm() = " << v.squaredNorm() << endl;
 | 
			
		||||
  cout << "v.norm() = " << v.norm() << endl;
 | 
			
		||||
  cout << "v.lpNorm<1>() = " << v.lpNorm<1>() << endl;
 | 
			
		||||
  cout << "v.lpNorm<Infinity>() = " << v.lpNorm<Infinity>() << endl;
 | 
			
		||||
 | 
			
		||||
  cout << endl;
 | 
			
		||||
  cout << "m.squaredNorm() = " << m.squaredNorm() << endl;
 | 
			
		||||
  cout << "m.norm() = " << m.norm() << endl;
 | 
			
		||||
  cout << "m.lpNorm<1>() = " << m.lpNorm<1>() << endl;
 | 
			
		||||
  cout << "m.lpNorm<Infinity>() = " << m.lpNorm<Infinity>() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXf m(2,2);
 | 
			
		||||
  m << 1,-2,
 | 
			
		||||
       -3,4;
 | 
			
		||||
 | 
			
		||||
  cout << "1-norm(m)     = " << m.cwiseAbs().colwise().sum().maxCoeff()
 | 
			
		||||
       << " == "             << m.colwise().lpNorm<1>().maxCoeff() << endl;
 | 
			
		||||
 | 
			
		||||
  cout << "infty-norm(m) = " << m.cwiseAbs().rowwise().sum().maxCoeff()
 | 
			
		||||
       << " == "             << m.rowwise().lpNorm<1>().maxCoeff() << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf mat(2,4);
 | 
			
		||||
  mat << 1, 2, 6, 9,
 | 
			
		||||
         3, 1, 7, 2;
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "Row's maximum: " << std::endl
 | 
			
		||||
   << mat.rowwise().maxCoeff() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::MatrixXf m(2,2);
 | 
			
		||||
  
 | 
			
		||||
  m << 1, 2,
 | 
			
		||||
       3, 4;
 | 
			
		||||
 | 
			
		||||
  //get location of maximum
 | 
			
		||||
  MatrixXf::Index maxRow, maxCol;
 | 
			
		||||
  float max = m.maxCoeff(&maxRow, &maxCol);
 | 
			
		||||
 | 
			
		||||
  //get location of minimum
 | 
			
		||||
  MatrixXf::Index minRow, minCol;
 | 
			
		||||
  float min = m.minCoeff(&minRow, &minCol);
 | 
			
		||||
 | 
			
		||||
  cout << "Max: " << max <<  ", at: " <<
 | 
			
		||||
     maxRow << "," << maxCol << endl;
 | 
			
		||||
  cout << "Min: " << min << ", at: " <<
 | 
			
		||||
     minRow << "," << minCol << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  for (int size=1; size<=4; ++size)
 | 
			
		||||
  {
 | 
			
		||||
    MatrixXi m(size,size+1);         // a (size)x(size+1)-matrix of int's
 | 
			
		||||
    for (int j=0; j<m.cols(); ++j)   // loop over columns
 | 
			
		||||
      for (int i=0; i<m.rows(); ++i) // loop over rows
 | 
			
		||||
        m(i,j) = i+j*size;           // to access matrix coefficients,
 | 
			
		||||
                                     // use operator()(int,int)
 | 
			
		||||
    std::cout << m << "\n\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  VectorXf v(4); // a vector of 4 float's
 | 
			
		||||
  // to access vector coefficients, use either operator () or operator []
 | 
			
		||||
  v[0] = 1; v[1] = 2; v(2) = 3; v(3) = 4;
 | 
			
		||||
  std::cout << "\nv:\n" << v << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix3f m3;
 | 
			
		||||
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
 | 
			
		||||
  Matrix4f m4 = Matrix4f::Identity();
 | 
			
		||||
  Vector4i v4(1, 2, 3, 4);
 | 
			
		||||
 | 
			
		||||
  std::cout << "m3\n" << m3 << "\nm4:\n"
 | 
			
		||||
    << m4 << "\nv4:\n" << v4 << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_Block.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_Block.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
Eigen::Block<Derived>
 | 
			
		||||
topLeftCorner(MatrixBase<Derived>& m, int rows, int cols)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::Block<Derived>(m.derived(), 0, 0, rows, cols);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
const Eigen::Block<const Derived>
 | 
			
		||||
topLeftCorner(const MatrixBase<Derived>& m, int rows, int cols)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::Block<const Derived>(m.derived(), 0, 0, rows, cols);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix4d m = Matrix4d::Identity();
 | 
			
		||||
  cout << topLeftCorner(4*m, 2, 3) << endl; // calls the const version
 | 
			
		||||
  topLeftCorner(m, 2, 3) *= 5;              // calls the non-const version
 | 
			
		||||
  cout << "Now the matrix m is:" << endl << m << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								cs440-acg/ext/eigen/doc/examples/class_CwiseBinaryOp.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								cs440-acg/ext/eigen/doc/examples/class_CwiseBinaryOp.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
// define a custom template binary functor
 | 
			
		||||
template<typename Scalar> struct MakeComplexOp {
 | 
			
		||||
  EIGEN_EMPTY_STRUCT_CTOR(MakeComplexOp)
 | 
			
		||||
  typedef complex<Scalar> result_type;
 | 
			
		||||
  complex<Scalar> operator()(const Scalar& a, const Scalar& b) const { return complex<Scalar>(a,b); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix4d m1 = Matrix4d::Random(), m2 = Matrix4d::Random();
 | 
			
		||||
  cout << m1.binaryExpr(m2, MakeComplexOp<double>()) << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/class_CwiseUnaryOp.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/class_CwiseUnaryOp.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
// define a custom template unary functor
 | 
			
		||||
template<typename Scalar>
 | 
			
		||||
struct CwiseClampOp {
 | 
			
		||||
  CwiseClampOp(const Scalar& inf, const Scalar& sup) : m_inf(inf), m_sup(sup) {}
 | 
			
		||||
  const Scalar operator()(const Scalar& x) const { return x<m_inf ? m_inf : (x>m_sup ? m_sup : x); }
 | 
			
		||||
  Scalar m_inf, m_sup;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix4d m1 = Matrix4d::Random();
 | 
			
		||||
  cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(CwiseClampOp<double>(-0.5,0.5)) << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
// define function to be applied coefficient-wise
 | 
			
		||||
double ramp(double x)
 | 
			
		||||
{
 | 
			
		||||
  if (x > 0)
 | 
			
		||||
    return x;
 | 
			
		||||
  else 
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix4d m1 = Matrix4d::Random();
 | 
			
		||||
  cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(ptr_fun(ramp)) << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_FixedBlock.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_FixedBlock.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
Eigen::Block<Derived, 2, 2>
 | 
			
		||||
topLeft2x2Corner(MatrixBase<Derived>& m)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::Block<Derived, 2, 2>(m.derived(), 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
const Eigen::Block<const Derived, 2, 2>
 | 
			
		||||
topLeft2x2Corner(const MatrixBase<Derived>& m)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::Block<const Derived, 2, 2>(m.derived(), 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix3d m = Matrix3d::Identity();
 | 
			
		||||
  cout << topLeft2x2Corner(4*m) << endl; // calls the const version
 | 
			
		||||
  topLeft2x2Corner(m) *= 2;              // calls the non-const version
 | 
			
		||||
  cout << "Now the matrix m is:" << endl << m << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_FixedVectorBlock.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_FixedVectorBlock.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
Eigen::VectorBlock<Derived, 2>
 | 
			
		||||
firstTwo(MatrixBase<Derived>& v)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::VectorBlock<Derived, 2>(v.derived(), 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
const Eigen::VectorBlock<const Derived, 2>
 | 
			
		||||
firstTwo(const MatrixBase<Derived>& v)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::VectorBlock<const Derived, 2>(v.derived(), 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix<int,1,6> v; v << 1,2,3,4,5,6;
 | 
			
		||||
  cout << firstTwo(4*v) << endl; // calls the const version
 | 
			
		||||
  firstTwo(v) *= 2;              // calls the non-const version
 | 
			
		||||
  cout << "Now the vector v is:" << endl << v << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_VectorBlock.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cs440-acg/ext/eigen/doc/examples/class_VectorBlock.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
Eigen::VectorBlock<Derived>
 | 
			
		||||
segmentFromRange(MatrixBase<Derived>& v, int start, int end)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::VectorBlock<Derived>(v.derived(), start, end-start);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename Derived>
 | 
			
		||||
const Eigen::VectorBlock<const Derived>
 | 
			
		||||
segmentFromRange(const MatrixBase<Derived>& v, int start, int end)
 | 
			
		||||
{
 | 
			
		||||
  return Eigen::VectorBlock<const Derived>(v.derived(), start, end-start);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int, char**)
 | 
			
		||||
{
 | 
			
		||||
  Matrix<int,1,6> v; v << 1,2,3,4,5,6;
 | 
			
		||||
  cout << segmentFromRange(2*v, 2, 4) << endl; // calls the const version
 | 
			
		||||
  segmentFromRange(v, 1, 3) *= 5;              // calls the non-const version
 | 
			
		||||
  cout << "Now the vector v is:" << endl << v << endl;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
template <typename Derived>
 | 
			
		||||
void print_size(const EigenBase<Derived>& b)
 | 
			
		||||
{
 | 
			
		||||
  std::cout << "size (rows, cols): " << b.size() << " (" << b.rows()
 | 
			
		||||
            << ", " << b.cols() << ")" << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
    Vector3f v;
 | 
			
		||||
    print_size(v);
 | 
			
		||||
    // v.asDiagonal() returns a 3x3 diagonal matrix pseudo-expression
 | 
			
		||||
    print_size(v.asDiagonal());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/function_taking_ref.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/function_taking_ref.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/SVD>
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
float inv_cond(const Ref<const MatrixXf>& a)
 | 
			
		||||
{
 | 
			
		||||
  const VectorXf sing_vals = a.jacobiSvd().singularValues();
 | 
			
		||||
  return sing_vals(sing_vals.size()-1) / sing_vals(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix4f m = Matrix4f::Random();
 | 
			
		||||
  cout << "matrix m:" << endl << m << endl << endl;
 | 
			
		||||
  cout << "inv_cond(m):          " << inv_cond(m)                      << endl;
 | 
			
		||||
  cout << "inv_cond(m(1:3,1:3)): " << inv_cond(m.topLeftCorner(3,3))   << endl;
 | 
			
		||||
  cout << "inv_cond(m+I):        " << inv_cond(m+Matrix4f::Identity()) << endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
/*
 | 
			
		||||
This program is presented in several fragments in the doc page.
 | 
			
		||||
Every fragment is in its own file; this file simply combines them.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "make_circulant.cpp.preamble"
 | 
			
		||||
#include "make_circulant.cpp.traits"
 | 
			
		||||
#include "make_circulant.cpp.expression"
 | 
			
		||||
#include "make_circulant.cpp.evaluator"
 | 
			
		||||
#include "make_circulant.cpp.entry"
 | 
			
		||||
#include "make_circulant.cpp.main"
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
template <class ArgType>
 | 
			
		||||
Circulant<ArgType> makeCirculant(const Eigen::MatrixBase<ArgType>& arg)
 | 
			
		||||
{
 | 
			
		||||
  return Circulant<ArgType>(arg.derived());
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
namespace Eigen {
 | 
			
		||||
  namespace internal {
 | 
			
		||||
    template<typename ArgType>
 | 
			
		||||
    struct evaluator<Circulant<ArgType> >
 | 
			
		||||
      : evaluator_base<Circulant<ArgType> >
 | 
			
		||||
    {
 | 
			
		||||
      typedef Circulant<ArgType> XprType;
 | 
			
		||||
      typedef typename nested_eval<ArgType, XprType::ColsAtCompileTime>::type ArgTypeNested;
 | 
			
		||||
      typedef typename remove_all<ArgTypeNested>::type ArgTypeNestedCleaned;
 | 
			
		||||
      typedef typename XprType::CoeffReturnType CoeffReturnType;
 | 
			
		||||
 | 
			
		||||
      enum { 
 | 
			
		||||
        CoeffReadCost = evaluator<ArgTypeNestedCleaned>::CoeffReadCost,
 | 
			
		||||
        Flags = Eigen::ColMajor 
 | 
			
		||||
      };
 | 
			
		||||
      
 | 
			
		||||
      evaluator(const XprType& xpr)
 | 
			
		||||
        : m_argImpl(xpr.m_arg), m_rows(xpr.rows())
 | 
			
		||||
      { }
 | 
			
		||||
 | 
			
		||||
      CoeffReturnType coeff(Index row, Index col) const
 | 
			
		||||
      {
 | 
			
		||||
        Index index = row - col;
 | 
			
		||||
        if (index < 0) index += m_rows;
 | 
			
		||||
        return m_argImpl.coeff(index);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      evaluator<ArgTypeNestedCleaned> m_argImpl;
 | 
			
		||||
      const Index m_rows;
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,20 @@
 | 
			
		||||
template <class ArgType>
 | 
			
		||||
class Circulant : public Eigen::MatrixBase<Circulant<ArgType> >
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  Circulant(const ArgType& arg)
 | 
			
		||||
    : m_arg(arg)
 | 
			
		||||
  { 
 | 
			
		||||
    EIGEN_STATIC_ASSERT(ArgType::ColsAtCompileTime == 1,
 | 
			
		||||
                        YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  typedef typename Eigen::internal::ref_selector<Circulant>::type Nested; 
 | 
			
		||||
 | 
			
		||||
  typedef Eigen::Index Index;
 | 
			
		||||
  Index rows() const { return m_arg.rows(); }
 | 
			
		||||
  Index cols() const { return m_arg.rows(); }
 | 
			
		||||
 | 
			
		||||
  typedef typename Eigen::internal::ref_selector<ArgType>::type ArgTypeNested;
 | 
			
		||||
  ArgTypeNested m_arg;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										8
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp.main
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp.main
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::VectorXd vec(4);
 | 
			
		||||
  vec << 1, 2, 4, 8;
 | 
			
		||||
  Eigen::MatrixXd mat;
 | 
			
		||||
  mat = makeCirculant(vec);
 | 
			
		||||
  std::cout << mat << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
template <class ArgType> class Circulant;
 | 
			
		||||
							
								
								
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp.traits
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant.cpp.traits
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
namespace Eigen {
 | 
			
		||||
  namespace internal {
 | 
			
		||||
    template <class ArgType>
 | 
			
		||||
    struct traits<Circulant<ArgType> >
 | 
			
		||||
    {
 | 
			
		||||
      typedef Eigen::Dense StorageKind;
 | 
			
		||||
      typedef Eigen::MatrixXpr XprKind;
 | 
			
		||||
      typedef typename ArgType::StorageIndex StorageIndex;
 | 
			
		||||
      typedef typename ArgType::Scalar Scalar;
 | 
			
		||||
      enum { 
 | 
			
		||||
        Flags = Eigen::ColMajor,
 | 
			
		||||
        RowsAtCompileTime = ArgType::RowsAtCompileTime,
 | 
			
		||||
        ColsAtCompileTime = ArgType::RowsAtCompileTime,
 | 
			
		||||
        MaxRowsAtCompileTime = ArgType::MaxRowsAtCompileTime,
 | 
			
		||||
        MaxColsAtCompileTime = ArgType::MaxRowsAtCompileTime
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant2.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								cs440-acg/ext/eigen/doc/examples/make_circulant2.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
// [circulant_func]
 | 
			
		||||
template<class ArgType>
 | 
			
		||||
class circulant_functor {
 | 
			
		||||
  const ArgType &m_vec;
 | 
			
		||||
public:
 | 
			
		||||
  circulant_functor(const ArgType& arg) : m_vec(arg) {}
 | 
			
		||||
 | 
			
		||||
  const typename ArgType::Scalar& operator() (Index row, Index col) const {
 | 
			
		||||
    Index index = row - col;
 | 
			
		||||
    if (index < 0) index += m_vec.size();
 | 
			
		||||
    return m_vec(index);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
// [circulant_func]
 | 
			
		||||
 | 
			
		||||
// [square]
 | 
			
		||||
template<class ArgType>
 | 
			
		||||
struct circulant_helper {
 | 
			
		||||
  typedef Matrix<typename ArgType::Scalar,
 | 
			
		||||
                 ArgType::SizeAtCompileTime,
 | 
			
		||||
                 ArgType::SizeAtCompileTime,
 | 
			
		||||
                 ColMajor,
 | 
			
		||||
                 ArgType::MaxSizeAtCompileTime,
 | 
			
		||||
                 ArgType::MaxSizeAtCompileTime> MatrixType;
 | 
			
		||||
};
 | 
			
		||||
// [square]
 | 
			
		||||
 | 
			
		||||
// [makeCirculant]
 | 
			
		||||
template <class ArgType>
 | 
			
		||||
CwiseNullaryOp<circulant_functor<ArgType>, typename circulant_helper<ArgType>::MatrixType>
 | 
			
		||||
makeCirculant(const Eigen::MatrixBase<ArgType>& arg)
 | 
			
		||||
{
 | 
			
		||||
  typedef typename circulant_helper<ArgType>::MatrixType MatrixType;
 | 
			
		||||
  return MatrixType::NullaryExpr(arg.size(), arg.size(), circulant_functor<ArgType>(arg.derived()));
 | 
			
		||||
}
 | 
			
		||||
// [makeCirculant]
 | 
			
		||||
 | 
			
		||||
// [main]
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::VectorXd vec(4);
 | 
			
		||||
  vec << 1, 2, 4, 8;
 | 
			
		||||
  Eigen::MatrixXd mat;
 | 
			
		||||
  mat = makeCirculant(vec);
 | 
			
		||||
  std::cout << mat << std::endl;
 | 
			
		||||
}
 | 
			
		||||
// [main]
 | 
			
		||||
							
								
								
									
										129
									
								
								cs440-acg/ext/eigen/doc/examples/matrixfree_cg.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								cs440-acg/ext/eigen/doc/examples/matrixfree_cg.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
#include <Eigen/IterativeLinearSolvers>
 | 
			
		||||
#include <unsupported/Eigen/IterativeSolvers>
 | 
			
		||||
 | 
			
		||||
class MatrixReplacement;
 | 
			
		||||
using Eigen::SparseMatrix;
 | 
			
		||||
 | 
			
		||||
namespace Eigen {
 | 
			
		||||
namespace internal {
 | 
			
		||||
  // MatrixReplacement looks-like a SparseMatrix, so let's inherits its traits:
 | 
			
		||||
  template<>
 | 
			
		||||
  struct traits<MatrixReplacement> :  public Eigen::internal::traits<Eigen::SparseMatrix<double> >
 | 
			
		||||
  {};
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Example of a matrix-free wrapper from a user type to Eigen's compatible type
 | 
			
		||||
// For the sake of simplicity, this example simply wrap a Eigen::SparseMatrix.
 | 
			
		||||
class MatrixReplacement : public Eigen::EigenBase<MatrixReplacement> {
 | 
			
		||||
public:
 | 
			
		||||
  // Required typedefs, constants, and method:
 | 
			
		||||
  typedef double Scalar;
 | 
			
		||||
  typedef double RealScalar;
 | 
			
		||||
  typedef int StorageIndex;
 | 
			
		||||
  enum {
 | 
			
		||||
    ColsAtCompileTime = Eigen::Dynamic,
 | 
			
		||||
    MaxColsAtCompileTime = Eigen::Dynamic,
 | 
			
		||||
    IsRowMajor = false
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Index rows() const { return mp_mat->rows(); }
 | 
			
		||||
  Index cols() const { return mp_mat->cols(); }
 | 
			
		||||
 | 
			
		||||
  template<typename Rhs>
 | 
			
		||||
  Eigen::Product<MatrixReplacement,Rhs,Eigen::AliasFreeProduct> operator*(const Eigen::MatrixBase<Rhs>& x) const {
 | 
			
		||||
    return Eigen::Product<MatrixReplacement,Rhs,Eigen::AliasFreeProduct>(*this, x.derived());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Custom API:
 | 
			
		||||
  MatrixReplacement() : mp_mat(0) {}
 | 
			
		||||
 | 
			
		||||
  void attachMyMatrix(const SparseMatrix<double> &mat) {
 | 
			
		||||
    mp_mat = &mat;
 | 
			
		||||
  }
 | 
			
		||||
  const SparseMatrix<double> my_matrix() const { return *mp_mat; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  const SparseMatrix<double> *mp_mat;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Implementation of MatrixReplacement * Eigen::DenseVector though a specialization of internal::generic_product_impl:
 | 
			
		||||
namespace Eigen {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
  template<typename Rhs>
 | 
			
		||||
  struct generic_product_impl<MatrixReplacement, Rhs, SparseShape, DenseShape, GemvProduct> // GEMV stands for matrix-vector
 | 
			
		||||
  : generic_product_impl_base<MatrixReplacement,Rhs,generic_product_impl<MatrixReplacement,Rhs> >
 | 
			
		||||
  {
 | 
			
		||||
    typedef typename Product<MatrixReplacement,Rhs>::Scalar Scalar;
 | 
			
		||||
 | 
			
		||||
    template<typename Dest>
 | 
			
		||||
    static void scaleAndAddTo(Dest& dst, const MatrixReplacement& lhs, const Rhs& rhs, const Scalar& alpha)
 | 
			
		||||
    {
 | 
			
		||||
      // This method should implement "dst += alpha * lhs * rhs" inplace,
 | 
			
		||||
      // however, for iterative solvers, alpha is always equal to 1, so let's not bother about it.
 | 
			
		||||
      assert(alpha==Scalar(1) && "scaling is not implemented");
 | 
			
		||||
      EIGEN_ONLY_USED_FOR_DEBUG(alpha);
 | 
			
		||||
 | 
			
		||||
      // Here we could simply call dst.noalias() += lhs.my_matrix() * rhs,
 | 
			
		||||
      // but let's do something fancier (and less efficient):
 | 
			
		||||
      for(Index i=0; i<lhs.cols(); ++i)
 | 
			
		||||
        dst += rhs(i) * lhs.my_matrix().col(i);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  int n = 10;
 | 
			
		||||
  Eigen::SparseMatrix<double> S = Eigen::MatrixXd::Random(n,n).sparseView(0.5,1);
 | 
			
		||||
  S = S.transpose()*S;
 | 
			
		||||
 | 
			
		||||
  MatrixReplacement A;
 | 
			
		||||
  A.attachMyMatrix(S);
 | 
			
		||||
 | 
			
		||||
  Eigen::VectorXd b(n), x;
 | 
			
		||||
  b.setRandom();
 | 
			
		||||
 | 
			
		||||
  // Solve Ax = b using various iterative solver with matrix-free version:
 | 
			
		||||
  {
 | 
			
		||||
    Eigen::ConjugateGradient<MatrixReplacement, Eigen::Lower|Eigen::Upper, Eigen::IdentityPreconditioner> cg;
 | 
			
		||||
    cg.compute(A);
 | 
			
		||||
    x = cg.solve(b);
 | 
			
		||||
    std::cout << "CG:       #iterations: " << cg.iterations() << ", estimated error: " << cg.error() << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    Eigen::BiCGSTAB<MatrixReplacement, Eigen::IdentityPreconditioner> bicg;
 | 
			
		||||
    bicg.compute(A);
 | 
			
		||||
    x = bicg.solve(b);
 | 
			
		||||
    std::cout << "BiCGSTAB: #iterations: " << bicg.iterations() << ", estimated error: " << bicg.error() << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    Eigen::GMRES<MatrixReplacement, Eigen::IdentityPreconditioner> gmres;
 | 
			
		||||
    gmres.compute(A);
 | 
			
		||||
    x = gmres.solve(b);
 | 
			
		||||
    std::cout << "GMRES:    #iterations: " << gmres.iterations() << ", estimated error: " << gmres.error() << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    Eigen::DGMRES<MatrixReplacement, Eigen::IdentityPreconditioner> gmres;
 | 
			
		||||
    gmres.compute(A);
 | 
			
		||||
    x = gmres.solve(b);
 | 
			
		||||
    std::cout << "DGMRES:   #iterations: " << gmres.iterations() << ", estimated error: " << gmres.error() << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    Eigen::MINRES<MatrixReplacement, Eigen::Lower|Eigen::Upper, Eigen::IdentityPreconditioner> minres;
 | 
			
		||||
    minres.compute(A);
 | 
			
		||||
    x = minres.solve(b);
 | 
			
		||||
    std::cout << "MINRES:   #iterations: " << minres.iterations() << ", estimated error: " << minres.error() << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								cs440-acg/ext/eigen/doc/examples/nullary_indexing.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								cs440-acg/ext/eigen/doc/examples/nullary_indexing.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
#include <Eigen/Core>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
// [functor]
 | 
			
		||||
template<class ArgType, class RowIndexType, class ColIndexType>
 | 
			
		||||
class indexing_functor {
 | 
			
		||||
  const ArgType &m_arg;
 | 
			
		||||
  const RowIndexType &m_rowIndices;
 | 
			
		||||
  const ColIndexType &m_colIndices;
 | 
			
		||||
public:
 | 
			
		||||
  typedef Matrix<typename ArgType::Scalar,
 | 
			
		||||
                 RowIndexType::SizeAtCompileTime,
 | 
			
		||||
                 ColIndexType::SizeAtCompileTime,
 | 
			
		||||
                 ArgType::Flags&RowMajorBit?RowMajor:ColMajor,
 | 
			
		||||
                 RowIndexType::MaxSizeAtCompileTime,
 | 
			
		||||
                 ColIndexType::MaxSizeAtCompileTime> MatrixType;
 | 
			
		||||
 | 
			
		||||
  indexing_functor(const ArgType& arg, const RowIndexType& row_indices, const ColIndexType& col_indices)
 | 
			
		||||
    : m_arg(arg), m_rowIndices(row_indices), m_colIndices(col_indices)
 | 
			
		||||
  {}
 | 
			
		||||
 | 
			
		||||
  const typename ArgType::Scalar& operator() (Index row, Index col) const {
 | 
			
		||||
    return m_arg(m_rowIndices[row], m_colIndices[col]);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
// [functor]
 | 
			
		||||
 | 
			
		||||
// [function]
 | 
			
		||||
template <class ArgType, class RowIndexType, class ColIndexType>
 | 
			
		||||
CwiseNullaryOp<indexing_functor<ArgType,RowIndexType,ColIndexType>, typename indexing_functor<ArgType,RowIndexType,ColIndexType>::MatrixType>
 | 
			
		||||
indexing(const Eigen::MatrixBase<ArgType>& arg, const RowIndexType& row_indices, const ColIndexType& col_indices)
 | 
			
		||||
{
 | 
			
		||||
  typedef indexing_functor<ArgType,RowIndexType,ColIndexType> Func;
 | 
			
		||||
  typedef typename Func::MatrixType MatrixType;
 | 
			
		||||
  return MatrixType::NullaryExpr(row_indices.size(), col_indices.size(), Func(arg.derived(), row_indices, col_indices));
 | 
			
		||||
}
 | 
			
		||||
// [function]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  std::cout << "[main1]\n";
 | 
			
		||||
  Eigen::MatrixXi A = Eigen::MatrixXi::Random(4,4);
 | 
			
		||||
  Array3i ri(1,2,1);
 | 
			
		||||
  ArrayXi ci(6); ci << 3,2,1,0,0,2;
 | 
			
		||||
  Eigen::MatrixXi B = indexing(A, ri, ci);
 | 
			
		||||
  std::cout << "A =" << std::endl;
 | 
			
		||||
  std::cout << A << std::endl << std::endl;
 | 
			
		||||
  std::cout << "A([" << ri.transpose() << "], [" << ci.transpose() << "]) =" << std::endl;
 | 
			
		||||
  std::cout << B << std::endl;
 | 
			
		||||
  std::cout << "[main1]\n";
 | 
			
		||||
 | 
			
		||||
  std::cout << "[main2]\n";
 | 
			
		||||
  B =  indexing(A, ri+1, ci);
 | 
			
		||||
  std::cout << "A(ri+1,ci) =" << std::endl;
 | 
			
		||||
  std::cout << B << std::endl << std::endl;
 | 
			
		||||
#if __cplusplus >= 201103L
 | 
			
		||||
  B =  indexing(A, ArrayXi::LinSpaced(13,0,12).unaryExpr([](int x){return x%4;}), ArrayXi::LinSpaced(4,0,3));
 | 
			
		||||
  std::cout << "A(ArrayXi::LinSpaced(13,0,12).unaryExpr([](int x){return x%4;}), ArrayXi::LinSpaced(4,0,3)) =" << std::endl;
 | 
			
		||||
  std::cout << B << std::endl << std::endl;
 | 
			
		||||
#endif
 | 
			
		||||
  std::cout << "[main2]\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								cs440-acg/ext/eigen/doc/examples/tut_arithmetic_add_sub.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								cs440-acg/ext/eigen/doc/examples/tut_arithmetic_add_sub.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix2d a;
 | 
			
		||||
  a << 1, 2,
 | 
			
		||||
       3, 4;
 | 
			
		||||
  MatrixXd b(2,2);
 | 
			
		||||
  b << 2, 3,
 | 
			
		||||
       1, 4;
 | 
			
		||||
  std::cout << "a + b =\n" << a + b << std::endl;
 | 
			
		||||
  std::cout << "a - b =\n" << a - b << std::endl;
 | 
			
		||||
  std::cout << "Doing a += b;" << std::endl;
 | 
			
		||||
  a += b;
 | 
			
		||||
  std::cout << "Now a =\n" << a << std::endl;
 | 
			
		||||
  Vector3d v(1,2,3);
 | 
			
		||||
  Vector3d w(1,0,0);
 | 
			
		||||
  std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Vector3d v(1,2,3);
 | 
			
		||||
  Vector3d w(0,1,2);
 | 
			
		||||
 | 
			
		||||
  cout << "Dot product: " << v.dot(w) << endl;
 | 
			
		||||
  double dp = v.adjoint()*w; // automatic conversion of the inner product to a scalar
 | 
			
		||||
  cout << "Dot product via a matrix product: " << dp << endl;
 | 
			
		||||
  cout << "Cross product:\n" << v.cross(w) << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix2d mat;
 | 
			
		||||
  mat << 1, 2,
 | 
			
		||||
         3, 4;
 | 
			
		||||
  Vector2d u(-1,1), v(2,0);
 | 
			
		||||
  std::cout << "Here is mat*mat:\n" << mat*mat << std::endl;
 | 
			
		||||
  std::cout << "Here is mat*u:\n" << mat*u << std::endl;
 | 
			
		||||
  std::cout << "Here is u^T*mat:\n" << u.transpose()*mat << std::endl;
 | 
			
		||||
  std::cout << "Here is u^T*v:\n" << u.transpose()*v << std::endl;
 | 
			
		||||
  std::cout << "Here is u*v^T:\n" << u*v.transpose() << std::endl;
 | 
			
		||||
  std::cout << "Let's multiply mat by itself" << std::endl;
 | 
			
		||||
  mat = mat*mat;
 | 
			
		||||
  std::cout << "Now mat is mat:\n" << mat << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Eigen::Matrix2d mat;
 | 
			
		||||
  mat << 1, 2,
 | 
			
		||||
         3, 4;
 | 
			
		||||
  cout << "Here is mat.sum():       " << mat.sum()       << endl;
 | 
			
		||||
  cout << "Here is mat.prod():      " << mat.prod()      << endl;
 | 
			
		||||
  cout << "Here is mat.mean():      " << mat.mean()      << endl;
 | 
			
		||||
  cout << "Here is mat.minCoeff():  " << mat.minCoeff()  << endl;
 | 
			
		||||
  cout << "Here is mat.maxCoeff():  " << mat.maxCoeff()  << endl;
 | 
			
		||||
  cout << "Here is mat.trace():     " << mat.trace()     << endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,17 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix2d a;
 | 
			
		||||
  a << 1, 2,
 | 
			
		||||
       3, 4;
 | 
			
		||||
  Vector3d v(1,2,3);
 | 
			
		||||
  std::cout << "a * 2.5 =\n" << a * 2.5 << std::endl;
 | 
			
		||||
  std::cout << "0.1 * v =\n" << 0.1 * v << std::endl;
 | 
			
		||||
  std::cout << "Doing v *= 2;" << std::endl;
 | 
			
		||||
  v *= 2;
 | 
			
		||||
  std::cout << "Now v =\n" << v << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXd m(2,2);
 | 
			
		||||
  m(0,0) = 3;
 | 
			
		||||
  m(1,0) = 2.5;
 | 
			
		||||
  m(0,1) = -1;
 | 
			
		||||
  m(1,1) = m(1,0) + m(0,1);
 | 
			
		||||
  std::cout << "Here is the matrix m:\n" << m << std::endl;
 | 
			
		||||
  VectorXd v(2);
 | 
			
		||||
  v(0) = 4;
 | 
			
		||||
  v(1) = v(0) - 1;
 | 
			
		||||
  std::cout << "Here is the vector v:\n" << v << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								cs440-acg/ext/eigen/doc/examples/tut_matrix_resize.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								cs440-acg/ext/eigen/doc/examples/tut_matrix_resize.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  MatrixXd m(2,5);
 | 
			
		||||
  m.resize(4,3);
 | 
			
		||||
  std::cout << "The matrix m is of size "
 | 
			
		||||
            << m.rows() << "x" << m.cols() << std::endl;
 | 
			
		||||
  std::cout << "It has " << m.size() << " coefficients" << std::endl;
 | 
			
		||||
  VectorXd v(2);
 | 
			
		||||
  v.resize(5);
 | 
			
		||||
  std::cout << "The vector v is of size " << v.size() << std::endl;
 | 
			
		||||
  std::cout << "As a matrix, v is of size "
 | 
			
		||||
            << v.rows() << "x" << v.cols() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <Eigen/Dense>
 | 
			
		||||
 | 
			
		||||
using namespace Eigen;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
  Matrix4d m;
 | 
			
		||||
  m.resize(4,4); // no operation
 | 
			
		||||
  std::cout << "The matrix m is of size "
 | 
			
		||||
            << m.rows() << "x" << m.cols() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user