Biblioteca de șabloane iterative

Biblioteca de șabloane iterative
Tip de Bibliotecă
Dezvoltator Laboratorul de sisteme deschise
Scris in C++
Sistem de operare Software multiplatformă
ultima versiune 4.0.0 ( 26 octombrie 2001 )
Licență Software semi-liber [1]
Site-ul web osl.iu.edu/research/itl/

Iterative Template Library (ITL) este o bibliotecă de componente concepute pentru a aplica metode numerice iterative pentru a manipula obiecte de algebră liniară .

Caracteristici

ITL este format din două grupuri funcționale. Primul grup este o colecție de metode iterative complexe care utilizează algoritmi de algebră liniară de bază implementați în pachete specializate, cum ar fi Matrix Template Library (MTL) sau Blitz++ . Al doilea grup este un set de algoritmi de precondiționare proiectați special pentru lucrul cu MTL.

Biblioteca ITL folosește interfețe abstracte pentru operații matrice - vector , vector-vector și vector- scalar , ceea ce vă permite să utilizați în mod transparent implementarea lor în biblioteci terțe.

Istoricul dezvoltării

Această bibliotecă a fost creată la Open Systems Lab  , un laborator de cercetare de la Universitatea Indiana , ca parte a MTL.

A fost publicat pentru prima dată separat de MTL pe 25 iulie 2000 . Noua versiune a inclus, printre altele, mai multe interfețe pentru BLAS și Blitz++.

În cea mai recentă versiune (4.0.0), biblioteca a fost descompusă în trei zone funcționale: metode de lucru cu subspațiul Krylov ; precondiții și interfețe. Metodele de lucru cu subspațiul Krylov sunt de bază și nu sunt limitate în utilizare de bibliotecile standard care implementează obiecte de algebră liniară. Interfețele sunt destinate utilizării în algoritmi iterativi ai subspațiului Krylov ai operațiilor de bază ale algebrei liniare, implementate în biblioteci terțe, cum ar fi: MTL, Blitz++. Precondițiile sunt implementate numai pentru lucrul cu biblioteca MTL.

De asemenea, interfețele experimentale au fost incluse în această versiune pentru a sprijini calculul paralel .

Ideile stabilite în ITL au fost continuate și dezvoltate în proiectul Iterative Eigensolver Template Library (IETL) [2] .

Exemple de utilizare

Principiile programării generice , în cadrul cărora a fost creată biblioteca, [3] presupun simplificarea interfețelor. Acest lucru a făcut ca algoritmii ITL să semene cu un fel de pseudocod . Cel puțin în comparație cu alte implementări ale acelorași algoritmi. De exemplu, implementarea metodei gradientului conjugat ar arăta astfel:

/* operații necesare: mult,copy,dot_conj,add,scaled */ template < class Matrix , clasa VectorX , clasa VectorB , clasa Preconditioner , clasa Iteration > int cg ( const Matrix & A , VectorX & x , const VectorB & b , const Preconditioner & M , Iteration & iter ) { typedef VectorX TmpVec ; typename itl_traits < VectorX >:: value_type rho ( 0 ), rho_1 ( 0 ), alpha ( 0 ), beta ( 0 ); TmpVec p ( dimensiune ( x )), q ( dimensiune ( x )), r ( dimensiune ( x )), z ( dimensiune ( x )); itl :: mult ( A , itl :: scaled ( x , -1.0 ), b , r ); în timp ce ( ! iter . terminat ( r )) { itl :: rezolva ( M , r , z ); rho = itl :: dot_conj ( r , z ); dacă ( iter.first ( ) ) itl :: copie ( z , p ); else { beta = rho / rho_1 ; itl :: add ( z , itl :: scaled ( p , beta ), p ); } itl :: mult ( A , p , q ); alpha = rho / itl :: dot_conj ( p , q ); itl :: add ( x , itl :: scaled ( p , alpha ), x ); itl :: add ( r , itl :: scaled ( q , - alpha ), r ); rho_1 = rho ; ++ iter ; } return iter . cod_eroare (); }

Note

  1. Acord de utilizare ITL (link inaccesibil) . Data accesului: 24 septembrie 2013. Arhivat din original la 1 octombrie 2013. 
  2. IETL draft Arhivat 3 octombrie 2013.
  3. Timofeev A. V., Syrtsev A. V., Kolotaev A. V. TKSYM Telecommunication Networks Simulation Library . gpss.ru (2005). Consultat la 27 septembrie 2013. Arhivat din original la 5 martie 2016.

Vezi și

Link -uri