1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Dense>
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main()
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   Matrix3f A;
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   A << 1, 2, 5,
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        2, 1, 4,
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        3, 0, 3;
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   cout << "Here is the matrix A:\n" << A << endl;
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   FullPivLU<Matrix3f> lu_decomp(A);
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   cout << "The rank of A is " << lu_decomp.rank() << endl;
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   cout << "Here is a matrix whose columns form a basis of the null-space of A:\n"
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        << lu_decomp.kernel() << endl;
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath   cout << "Here is a matrix whose columns form a basis of the column-space of A:\n"
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        << lu_decomp.image(A) << endl; // yes, have to pass the original A
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
21