2008-12-12 14 views
15

Potrzebowałbym kilku podstawowych konstrukcji wektorów matematycznych w aplikacji. Dot produkt, produkt krzyżowy. Znajdowanie przecięcia linii, tego rodzaju rzeczy.Open source C++ biblioteka do matematyki wektorowej

Mogę to zrobić sam (w rzeczywistości już), ale czy nie ma "standardu" do użycia, więc błędy i ewentualne optymalizacje nie byłyby dla mnie?

Zwiększenie go nie ma. Ich część dotycząca matematyki dotyczy funkcji statystycznych, o ile mogłem to zobaczyć.

Uzupełnienie:

doładowania 1,37 wydaje się rzeczywiście mieć this. Z wdziękiem wprowadzają szereg innych rozwiązań na polu, i dlaczego wciąż pracują i robią własne. Lubię to.

+0

zobacz mój komentarz poniżej - zwiększenie liniowej algebry istnieje od co najmniej 1,29. – tgamblin

+1

to pytanie zostało zadane ponad 4 lata temu. Czy są jakieś aktualizacje? – nkint

Odpowiedz

10

Ponownie sprawdź, czy ol'good przyjaciel programistów C++ nazywa się Boost. Ma a linear algebra package, który może dobrze pasować do twoich potrzeb.

+0

Wygląda na to, że część jest tylko w nowym oddziale 1.37, ale będę wyglądać. Dzięki!! – akauppi

+0

Jestem prawie pewny, że boost :: numeric :: ublas istnieje od wersji 1.29 lub wcześniejszej. Jego link to 1,37. – tgamblin

+0

Rzeczywiście, pierwsze wydanie jest w 1.29, jak napisano przez tgamblin: patrz na dole tej strony: http://www.boost.org/doc/libs/1_37_0 –

1

Kontrola www.netlib.org, prowadzona przez Oak Ridge National Lab i University of Tennessee. Możesz tam szukać pakietów liczbowych. Jest też Numerical Recipes in C++, który ma kod, który się z nim zgadza, ale wersja C++ książki jest nieco droga i słyszałem kod opisany jako "straszny". Wersje C i FORTRAN są bezpłatne, a powiązany kod jest całkiem niezły.

+0

Poza tym, że jest ogólnie słaby, kod w przepisach numerycznych ma również nieparzystą licencję dołączoną do jego użycia. –

+0

Podczas korzystania z kodu z receptur numerycznych w C uwaga na instrukcje "exit" w kodzie. Zajęło mi trochę czasu, aby dowiedzieć się, dlaczego moja aplikacja czasami "rozbił się" z tego powodu. – foraidt

+0

O samej książce powiedziałbym, że jest dobrze napisana i wyjaśnia tyle samo o problemie, ile jest konieczne. Jeśli chodzi o dostarczony kod, zgadzam się z Davidem. – foraidt

2

Nie będę używać kodu NRC do niczego innego, niż do nauki pojęć.

myślę, czego szukasz jest Blitz++

+0

wyraźnie Blitz ++ ma gorsze wyniki w stosunku do innych: http://eigen.tuxfamily.org/index.php?title=Benchmark –

+1

To zależy od wielkości i rodzaju wektora. W przypadku małych wektorów, których długość jest znana w czasie kompilacji, Blitz ++ może generować rozwinięty kod dla produktów z kropkami itp., Których nie można pokonać. Duże znaczenie mają inne wektory, w których kafelkowanie i cacheing ma największe znaczenie. –

0

Dla algebry liniowej: spróbuj JAMA/TNT. To obejmowałoby produkty dot. (+ faktoring matrycowy i inne rzeczy) Jeśli chodzi o produkty z krzyżowymi wektorami (naprawdę ważne tylko dla 3D, w przeciwnym razie myślę, że dostajesz się do tensorów), nie jestem pewien.

11

Nie testowałem tego, ale C++ eigen library staje się coraz bardziej popularne w dzisiejszych czasach. Według nich są one na równi z najszybszymi bibliotekami, a ich interfejs API wygląda całkiem zgrabnie.

+0

Zobacz benchmarki na stronie http://eigen.tuxfamily.org/index.php?title=Benchmark – gnud

0

Aby uzyskać wyjątkowo lekką bibliotekę (jeden plik .h), należy sprawdzić wersję CImg. Jest nastawiony na przetwarzanie obrazu, ale nie ma problemów z obsługą wektorów.

5

Armadillo

Armadillo stosuje opóźnionego oceny podejście do łączenia kilku operacji w jedną i redukcji (lub wyeliminuje) potrzebę tymczasowych. Gdzie obowiązuje , kolejność operacji jest zoptymalizowana pod kątem . Opóźnioną ocenę i optymalizację uzyskuje się przez rekurencyjne szablony i szablon metaprogramowania .

Podczas operacji Chained jak dodawanie, odejmowanie i mnożenia (osnowy i element zegara) są głównymi celami możliwości przyspieszyć inne operacje, takie jak manipulowanie podmatryc, można je również zoptymalizować . Zadbano o zachowanie wydajności dla macierzy "małych" i "dużych".

Powiązane problemy