Potrzebuję rozwiązać układ równań liniowych w moim programie. Czy istnieje prosta biblioteka algebry liniowej dla C++, najlepiej złożona z nie więcej niż kilku nagłówków? Szukałem prawie godziny, a wszystkie te, które znalazłem, wymagają rozmyślania z Linuksem, kompilowania bibliotek DLL w MinGW itp. Itd. (Używam Visual Studio 2008.)System równań liniowych w C++?
Odpowiedz
Myślę, że Eigen jest tym, czego szukasz.
http://eigen.tuxfamily.org/index.php?title=Main_Page
Jest to biblioteka tylko nagłówki i kompiluje wielu kompilatorów. Używa nawet egzotycznego zestawu do szybszej matematyki.
To jest strona, która pokazuje api Liniowy solver.
http://eigen.tuxfamily.org/dox-2.0/TutorialAdvancedLinearAlgebra.html
Ma kilka rozwiązują za pomocą prostego API.
Boost ma kilka podstawowe rzeczy algebry liniowej.
Oto dokładniejszy link: http://www.boost.org/doc/libs/1_42_0/libs/numeric/ublas/doc/index.htm – Potatoswatter
Nie mogę znaleźć niczego w dokumentacji dotyczącej odwracania macierzy lub rozwiązywania równań liniowych. Czy ja tęsknię? – Archagon
@Archagon: Zasadniczo Boost zapewnia pojemniki dla wektorów, macierzy i podstawowej funkcjonalności BLAS (obsługuje wszystkie trzy poziomy BLAS). W przypadku bardziej zaawansowanej algebry liniowej prawdopodobnie będziesz chciał uzyskać implementację LAPACK. Istnieją wiązania dla Boost, ale nie są one w głównej dystrybucji (musisz je polować). Nie ingerujecie w wiązania, ale im to trochę ułatwia (teoretycznie). –
Możesz użyć C++ bindings z LAPACK. Szybki google podniósł this link do niektórych bibliotek LAPACK dla Windows. W zależności od tego, jak duże są twoje systemy, może to być jednak przesada.
Jestem wielkim fanem Armadillo ale kompilator może być problemem tutaj według The end of the download page:
systemu Windows
Rozwój i testowanie Armadillo tej pory zostało zrobione głównie na platformach UNIX-owych, jednak numer powinien być niewielki lub żaden konkretny kod platformy . Chociaż szczątkowe testy zostały wykonane na komputerze z systemem Windows, programiści są zainteresowani usłyszeniem , jak dobrze działa Armadillo w więcej szczegółowych testach .
Jeśli masz kłopoty z kompilatora do „MS Visual C++ 2008 Express Edition” (ze względu na jego niekompletnym wsparcie dla C++ standard), można spróbować następujące alternatywne darmowe kompilatory:
- C++ kompilator Intela
- GCC (część MinGW)
- GCC (część Cygwin)
Warto wypróbować, ponieważ jest to dobrze oznaczona (i najczęściej szablonowana) biblioteka.
W przeciwnym razie może wypróbować Eigen2, który wymienia twój kompilator jako obsługiwany.
Edit: W odpowiedzi na komentarz, Armadillo nie wymagają Lapack ale działa lepiej z nim (a jeszcze lepiej dostrojone Blas):
Jakie inne biblioteki muszę w pełni korzystać z Armadillo?
O: Pancernik może działać bez bibliotek zewnętrznych. Zaleca się jednak zainstalowanie bibliotek LAPACK i ATLAS w celu uzyskania dodatkowej funkcjonalności. W miarę możliwości Armadillo będzie używał procedur ATLAS zamiast LAPACK.P: Jak dobrze będzie pracować Armadillo bez LAPACK/ATLAS?
A: Podstawowe funkcje będą dostępne (np. Dodawanie macierzy i mnożenie), , ale rzeczy takie jak rozkład własny nie będą.Mnożenie macierzy (głównie dla dużych macierzy) nie będzie tak szybkie.
Próbowałem Armadillo. Potrzebuje LAPACK do rozwiązywania równań liniowych, co wymaga skompilowania biblioteki DLL. – Archagon
Nie, zobacz moją edycję. Jest * lepszy * z Lapack, ale mówi, że może żyć bez. Nie próbowałem tej konfiguracji, ponieważ mam Lapacka ... –
Też tak myślałem, ale gdy tylko używam funkcji solve(), to mówi mi, że potrzebuję zainstalowanego LAPACK ... – Archagon
Podoba mi się to pytanie i jest dla mnie przydatne. Jest to konstruktywne dla mnie ... – user40780