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