2010-03-19 11 views
13

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++?

+1

Podoba mi się to pytanie i jest dla mnie przydatne. Jest to konstruktywne dla mnie ... – user40780

Odpowiedz

15

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.

+1

To wydaje się działać. Dzięki! – Archagon

+0

Też potrzebuję tego! Dziękuję Ci. – user40780

7

Boost ma kilka podstawowe rzeczy algebry liniowej.

+2

Oto dokładniejszy link: http://www.boost.org/doc/libs/1_42_0/libs/numeric/ublas/doc/index.htm – Potatoswatter

+0

Nie mogę znaleźć niczego w dokumentacji dotyczącej odwracania macierzy lub rozwiązywania równań liniowych. Czy ja tęsknię? – Archagon

+0

@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). –

5

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.

2

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.

+0

Próbowałem Armadillo. Potrzebuje LAPACK do rozwiązywania równań liniowych, co wymaga skompilowania biblioteki DLL. – Archagon

+0

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 ... –

+0

Też tak myślałem, ale gdy tylko używam funkcji solve(), to mówi mi, że potrzebuję zainstalowanego LAPACK ... – Archagon