C ++ библиотека с открытым исходным кодом для векторной математики

Мне понадобятся некоторые базовые векторные математические конструкции в приложении. Точечный продукт, перекрестный продукт. Нахождение пересечения линий, такого рода вещи.

Я могу сделать это сам (на самом деле, уже), но разве не существует «стандарта» для использования, чтобы не было ошибок и возможных оптимизаций для меня?

У Boost его нет. Насколько я мог видеть, их математическая часть посвящена статистическим функциям.

Приложение:

Boost 1.37 действительно, кажется, имеет это . Они также изящно представляют ряд других решений на местах, и почему они все еще пошли и сделали свои собственные. Я люблю это.

12.12.2008 14:37:59
см. мой комментарий ниже - линейная алгебра наддува существует как минимум с 1.29.
Todd Gamblin 12.12.2008 15:43:03
этот вопрос задавался более 4 лет назад. Есть ли какие-нибудь обновления?
nkint 7.05.2013 22:04:20
8 ОТВЕТОВ
РЕШЕНИЕ

Еще раз проверь того хорошего друга программистов на C ++, который называется Boost . Он имеет пакет линейной алгебры, который вполне может удовлетворить ваши потребности.

10
12.12.2008 14:43:49
Кажется, что часть только в новой ветке 1.37, но я посмотрю. Спасибо!!
akauppi 12.12.2008 15:19:41
Я уверен, что boost :: numeric :: ublas существует с 1.29 или ранее. Его ссылка только на 1,37.
Todd Gamblin 12.12.2008 15:41:04
действительно, первый выпуск в 1.29, как написано tgamblin: см. внизу этой страницы: boost.org/doc/libs/1_37_0
PW. 12.12.2008 15:58:16
Полезно сравнить производительность Boost UBLAS с eigen и другими: eigen.tuxfamily.org/index.php?title=Benchmark
Özgür 30.01.2009 20:48:32

Посетите сайт www.netlib.org , который поддерживается Национальной лабораторией Ок-Риджа и Университетом Теннесси. Вы можете искать числовые пакеты там. Есть также Числовые Рецепты в C ++ , в которых есть код, который идет вместе с ним, но версия книги на C ++ несколько дорогая, и я слышал, что код описан как «ужасный». Версии C и FORTRAN бесплатны, и соответствующий код довольно хорош.

1
12.12.2008 14:51:02
Помимо того, что он в целом слаб, у кода в Числовых Рецептах также есть странная лицензия, связанная с его использованием.
David Nehme 12.12.2008 15:05:26
При использовании кода из Numeric Recipes in C остерегайтесь операторов «выхода» в коде. Мне потребовалось некоторое время, чтобы понять, почему мое приложение иногда "зависало" из-за этого.
foraidt 12.12.2008 15:06:19
О самой книге я бы сказал, что она хорошо написана и объясняет столько же проблем, сколько необходимо. Что касается предоставленного кода, я согласен с Дэвидом.
foraidt 12.12.2008 15:10:12
boost :: numeric :: ublas использует ublas, который поддерживается netlib.
Todd Gamblin 12.12.2008 15:41:47

Я бы держался подальше от использования кода NRC для чего-либо, кроме изучения концепций.

Я думаю, что вы ищете, Blitz ++

2
12.12.2008 14:53:47
Blitz ++ явно уступает
Özgür 30.01.2009 20:45:44
Это зависит от размера и вида вектора. Для небольших векторов, длина которых известна во время компиляции, Blitz ++ может генерировать развернутый код для точечных продуктов и т. Д., Который нельзя превзойти. Большие векторы, где мозаика и кэширование имеют первостепенное значение, это другой вопрос.
Seth Johnson 22.09.2009 17:54:17

В пророчественном SDK есть хорошая библиотека векторов для 3d графики:

Проверьте http://www.twilight3d.com/downloads.html

0
12.12.2008 14:56:22

Для линейной алгебры: попробуйте JAMA / TNT . Это будет охватывать точечные продукты. (+ матричный факторинг и другие вещи). Что касается векторных кросс-произведений (действительно справедливо только для 3D, в противном случае я думаю, что вы попадаете в тензоры), я не уверен.

0
12.12.2008 14:59:46

Я не проверял это, но собственная библиотека C ++ становится все более популярной в наши дни. По их словам, они находятся на одном уровне с самыми быстрыми библиотеками, и их API выглядит довольно аккуратно для меня.

11
12.12.2008 17:10:55
Посмотрите на некоторые тесты на eigen.tuxfamily.org/index.php?title=Benchmark
gnud 12.12.2008 17:13:05

Для чрезвычайно легкой (один файл .h) библиотеки, проверьте CImg . Он ориентирован на обработку изображений, но не имеет проблем с обработкой векторов.

0
12.12.2008 17:15:45

броненосец

Armadillo использует метод отложенной оценки, чтобы объединить несколько операций в одну и уменьшить (или устранить) потребность во временных. Где это применимо, порядок операций оптимизирован. Задержка оценки и оптимизации достигается с помощью рекурсивных шаблонов и шаблонного метапрограммирования.

В то время как связанные операции, такие как сложение, вычитание и умножение (матричные и поэлементные), являются основными целями для возможностей ускорения, другие операции, такие как манипуляции с подматрицами, также могут быть оптимизированы. Были приняты меры для сохранения эффективности как для «малых», так и для «больших» матриц.

5
11.03.2009 11:30:22