1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * @file calcKernelMatrixProperties.cpp
- * @brief calc some kernel matrix properties
- * @author Erik Rodner
- * @date 01/15/2010
- */
- #include "core/basics/Config.h"
- #include "core/vector/Eigen.h"
- using namespace std;
- using namespace NICE;
- /**
-
- calc some kernel matrix properties
-
- */
- int main (int argc, char **argv)
- {
- std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
- Config conf ( argc, argv );
-
- string in = conf.gS("main", "in");
- cout << "reading kernel matrix ..." << endl;
- ifstream ifs ( in.c_str(), ios::in );
- if ( !ifs.good() )
- fthrow(IOException, "Unable to read " << in << "." );
- Matrix kernelMatrixOrig;
- ifs >> kernelMatrixOrig;
- ifs.close();
- int norig = kernelMatrixOrig.rows();
- int morig = kernelMatrixOrig.cols();
- if ( norig != morig )
- fthrow(Exception, "Kernel matrix has to be quadratic.");
- int size = conf.gI("main", "size", 100 );
- if ( size > norig ) size = norig;
-
- Matrix kernelMatrix ( size, size );
- for ( int i = 0 ; i < kernelMatrix.rows(); i++ )
- for ( int j = 0 ; j < kernelMatrix.cols(); j++ )
- kernelMatrix(i,j) = kernelMatrixOrig(i,j);
-
- int n = kernelMatrix.rows();
- int m = kernelMatrix.cols();
- cout << "size: " << n << " x " << m << " (orig: " << norig << " x " << norig << " )" << endl;
- cout << "performing eigenvalue decomposition ..." << endl;
- Vector eigvals (n);
- eigenvalues ( kernelMatrix, &eigvals );
- double min_lambda = eigvals.Min();
- double max_lambda = eigvals.Max();
- cout << "smallest eigenvalue: " << min_lambda << endl;
- cout << "largest eigenvalue: " << max_lambda << endl;
-
- double sigma = conf.gD("main", "sigma", 0.01);
- double upper_bound = 0.5 * sigma * sigma / ( pow(min_lambda,3) );
- double lower_bound = 0.5 * sigma * sigma / ( pow(min_lambda,3) + sigma*sigma );
- cout << "inverse approximation bounds (cf. GP Multi-Task Notes): " << lower_bound << " <= |R|_2 <= " << upper_bound << endl;
-
-
- return 0;
- }
|