Lineární algebra v C++

22. 5. 2009 14:52 Tomáš Ehrlich

V nejbližší době začnu rozjíždět projekt na vytvoření programového prostředí pro optimalizaci betonových konstrukcí. Součástí tohoto programy bude rozhraní pro statickou analýzu konstrukce. Právě tady budu potřebovat nějaký nástroj na řešení lineární rovnic.

Knihovna lapack vypadá jako přesně to, co potřebuju. Díky své nadstavbě lapackpp (dříve lapack++) ji lze používat přímo ve zdrojovém kódu. V repozitáři Debianu jsem ji bohužel nenašel, instalace ze zdroje byla naštěstí bezproblémová (./configure –with-gnu-ld && make && make install). Jediný problém bylo v několika souborech, které includovaly vlastní knihovny pomocí #include , místo #include "", ačkoliv hledané soubory byly přímo v adresáři.

Příklad:

#include "lapackpp/lapackpp.h" using namespace std; // reseni soustavy lineárních rovnic int main() { int N = 2000; // Matice koeficientu soustavy LaGenMatDouble A(N,N); // Vysledny vektor a vektor prave strany LaVectorDouble x(N), b(N); // Vygenerovnani nahodne matice a vektoru for (int i = 0; i < N; i++) { b(i) = i; for (int k = 0; k < N; k ++) { A(i, k) = i * k + rand(); } } // ...a reseni. LaLinearSolve(A,x,b); return 0; }

Řešení této soustavy o 2000 rovnicích trvá necelé 4s, pro N = 250 je potřebný čas 10ms, což dává docela dobré vyhlídky na interaktivitu grafického rozhraní programu.

Další informace je možné najít na webu lapackpp .

Sdílet

  • Související články na ostatních blozích