C++ Bc. 2 cpp: Porovnání verzí
m Stránka C plus plus Bc. 2 cpp přemístěna na stránku C++ Bc. 2 cpp |
m zjednodušená verze |
||
(Nejsou zobrazeny 4 mezilehlé verze od jednoho dalšího uživatele.) | |||
Řádek 26: | Řádek 26: | ||
do { | do { | ||
vlc0 = vlc1; | vlc0 = vlc1; | ||
v = A*v; | v = A*v; | ||
vlc1 = v.norm_L2(); | |||
v /= vlc1; | |||
vlc1 | |||
} while( std::abs( (vlc0 - vlc1)/vlc1 ) > rel_chyba); | } while( std::abs( (vlc0 - vlc1)/vlc1 ) > rel_chyba); | ||
Řádek 64: | Řádek 64: | ||
} | } | ||
[ [[C | 10 | ||
339.375 | |||
[ [[C++ Bc. 2|Zpět]] ] | |||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 27. 11. 2006, 20:56
#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; vlc1 = v.norm_L2(); v /= vlc1; } 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; } }
10 339.375
[ Zpět ]