17faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include <iostream>
27faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez#include <Eigen/SVD>
37faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezusing namespace Eigen;
47faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezusing namespace std;
57faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
67faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezfloat inv_cond(const Ref<const MatrixXf>& a)
77faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
87faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  const VectorXf sing_vals = a.jacobiSvd().singularValues();
97faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  return sing_vals(sing_vals.size()-1) / sing_vals(0);
107faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
117faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezint main()
137faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez{
147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  Matrix4f m = Matrix4f::Random();
157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  cout << "matrix m:" << endl << m << endl << endl;
167faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  cout << "inv_cond(m):          " << inv_cond(m)                      << endl;
177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  cout << "inv_cond(m(1:3,1:3)): " << inv_cond(m.topLeftCorner(3,3))   << endl;
187faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  cout << "inv_cond(m+I):        " << inv_cond(m+Matrix4f::Identity()) << endl;
197faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez}
20