C++ Bc. 2 cpp: Porovnání verzí
mBez shrnutí editace |
m Stránka C plus plus Bc. 2 cpp přemístěna na stránku C++ Bc. 2 cpp |
(Žádný rozdíl)
|
Verze z 1. 9. 2006, 22:19
#include <iostream> #include <cmath> #include <matvec/matvec.h> struct Chyba { template <typename T> Chyba(T t) : text(t) {} std::string text; }; double dominantni_vlastni_cislo_matice(const GNU_gama::Mat<>& A, double rel_chyba = 1e-5) { using namespace GNU_gama; if ( !A.cols() || (A.cols() != A.rows()) ) throw Chyba("Chybna dimenze matice A"); Vec<> v( A.cols() ); v.set_all(1); double vlc0, vlc1 = 0; do { vlc0 = vlc1; v = A*v; v /= v.norm_L2(); vlc1 = trans(v) * A * v; } while( std::abs( (vlc0 - vlc1)/vlc1 ) > rel_chyba); return vlc1; } int main() { GNU_gama::Mat<> A1 (3, 3), A2 (3, 3); A1 = -261, 209, -49, -530, 422, -98, -800, 631, -144; A2 = -261, 0, -49, -530, 422, -98, -800, 631, -144; try { std::cout << dominantni_vlastni_cislo_matice(A1) << std::endl; std::cout << dominantni_vlastni_cislo_matice(A2) << std::endl; } catch(Chyba err) { std::cout << err.text << std::endl; } }
[ Zpět ]