Go to the documentation of this file.00001 
00009 
00010 
00011 
00012 
00013 #include <iostream>
00014 #include <ecl/linear_algebra.hpp>
00015 #include <ecl/threads/priority.hpp>
00016 #include <ecl/time/stopwatch.hpp>
00017 #include <ecl/time/timestamp.hpp>
00018 #include <ecl/exceptions/standard_exception.hpp>
00019 #include <ecl/formatters.hpp>
00020 
00021 
00022 
00023 
00024 
00025 using ecl::StandardException;
00026 using ecl::StopWatch;
00027 using ecl::TimeStamp;
00028 using Eigen::Matrix3f;
00029 using Eigen::MatrixXf;
00030 
00031 
00032 
00033 
00034 
00035 int main(int argc, char **argv) {
00036 
00037         const unsigned int repeats = 10;
00038         try {
00039                 ecl::set_priority(ecl::RealTimePriority4);
00040         } catch ( StandardException &e ) {
00041                 
00042         }
00043     StopWatch stopwatch;
00044     TimeStamp times[9];
00045 
00046     Matrix3f M3 = Matrix3f::Random();
00047     Matrix3f M3I;
00048     MatrixXf M100 = MatrixXf::Random(100,100);
00049     MatrixXf M100I;
00050 
00051     
00052     for ( unsigned int i = 0; i < repeats; ++i ) {
00053         M3.inverse();
00054     }
00055 
00056     times[0].stamp(0,0);
00057     for ( unsigned int i = 0; i < repeats; ++i ) {
00058         M3 = Matrix3f::Random();
00059         stopwatch.restart();
00060         M3I = M3.inverse();
00061         times[0] += stopwatch.split();
00062     }
00063     times[1].stamp(0,0);
00064     for ( unsigned int i = 0; i < repeats; ++i ) {
00065         M100 = MatrixXf::Random(100,100);
00066         stopwatch.restart();
00067         M100I = M100.inverse();
00068         times[1] += stopwatch.split();
00069     }
00070     times[2].stamp(0,0);
00071     for ( unsigned int i = 0; i < repeats; ++i ) {
00072         M100 = MatrixXf::Random(100,100);
00073         stopwatch.restart();
00074         M100I = M100.fullPivLu().inverse();
00075         times[2] += stopwatch.split();
00076     }
00077 
00078     ecl::Format<double> format(15,9,ecl::RightAlign);
00079     std::cout << std::endl;
00080     std::cout << "************** Eigen3 Inverse ***************" << std::endl;
00081     std::cout << std::endl;
00082     std::cout << "   3x3   (direct by val) : " << format(static_cast<double>(times[0])/static_cast<double>(repeats)) << std::endl;
00083     std::cout << " 100x100 (PPivLU by val) : " << format(static_cast<double>(times[1])/static_cast<double>(repeats)) << std::endl;
00084     std::cout << " 100x100 (FPivLU by val) : " << format(static_cast<double>(times[2])/static_cast<double>(repeats)) << std::endl;
00085     std::cout << std::endl;
00086 
00087         return 0;
00088 }