LINUX.ORG.RU

Библиотека с++, линейные уравнения, матрицы


0

0

Здравствуйте. Открыл для себя boost. ) С uBLAS очень удобно перемножать вектора и матрицы.
1. Кое-где написано, что с помощью boost можно еще решать системы линейных уравнений (итерационные методы, метод Гаусса и т.д.). Но что-то я не нашёл как, где?
2. Как вычислить определитель матрицы, используя boost?

anonymous
Ответ на: комментарий от dilmah

я пользовался гуглом. ) Но математику на английском я плохо понимаю, поэтому и прошу помочь тех, кто уже более-менее разобрался.

anonymous
()

нахождение детерминанта (для тех, кто будет искать): http://lists.boost.org/MailArchives/ublas/2005/12/0916.php
И ещё я не нашел скалярного произведения векторов. Простая функция, но её нет.
Хоть я плохо разобрался в uBLAS, но то что там нет самых часто востребованных необходимых вещей мне уже не нравится.

anonymous
()
Ответ на: комментарий от anonymous

> И ещё я не нашел скалярного произведения векторов. Простая функция, но её нет.

скалярное произведение называется dot-product -- в blas есть операция dot

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

спасибо за наводку. Нашел скалярное произведение: t = inner_prod(u, v);
t -число.
Интересно, что тогда делает функция C = outer_prod(u, v)? С - матрица.

anonymous
()

Эти все алгоритмы за день пишутся на обычном C без привлечения таких монстров как boost.

Reset ★★★★★
()
Ответ на: комментарий от anonymous

> Интересно, что тогда делает функция C = outer_prod(u, v)? С - матрица.

скалярное произведение -- это если умножить (как матрицы) вектор-строку на (ко)вектор-столбец -- получится скаляр.

Если же умножить наоборот: (ко)вектор-столбец на вектор-строку то получится матрица (ранга 1) -- это и есть outer poduct

dilmah ★★★★★
()
Ответ на: комментарий от Reset

1) Я скоро буду заниматься более серьёзными вещами, я только начинаю разбираться с "математическими" библиотеками.
2) У меня есть собственные классы для векторов и матриц, в которых реализован необходимый функционал. Но мой уровень программирования низок для того чтобы написать нечто подобное boost по эффективности, переносимости и т.д.

anonymous
()

совет - посмотри ещё на Blitz++

jtootf ★★★★★
()

А вообще, бросай буст. Есть куча замечательных библиотек, написанных и оптимизированных под различные архитектуры.

balodja ★★★
()
Ответ на: комментарий от balodja

> Может ранга 2? Первый ранг -- это вектор. Нулевой -- скаляр.

я под рангом имел в виду не уровень (level 1, 2, 3), а обычный ранг (кол-во лин независимых строк или столбцов) -- если столбец (ковектор в пространстве А) умножить на строку (вектор в пространстве Б) то получится матрица ранга <= 1 (линейный оператор А->Б имеющий одномерный образ, натянутый на вектор в Б)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Угу, извиняюсь, не сообразил, что имеется ввиду. Это конечно верно.

balodja ★★★
()
Ответ на: комментарий от anonymous

> 2) У меня есть собственные классы для векторов и матриц, в которых реализован необходимый функционал.

Эти классы приводятся к человеческому double *, который принят в научном мире? Если нет, то гемморой с интеграцией серьезных численных библиотек обеспечен.

Reset ★★★★★
()
Ответ на: комментарий от Reset

В Intel Math Kernel Library есть PARDISO - прямая решалка СЛАУ с разреженными матрицами. Реально быстрая, обогнать её мы так и не смогли.

yz
()
Ответ на: комментарий от yz

Про разреженные матрицы не было речи, вроде. Это очень специфическое направление с миллионом хитроумных алгоритмов.

balodja ★★★
()
Ответ на: комментарий от balodja

Вообще говоря, миллион алгоритмов придуман для решения разных типов задач, а не для работы с самими матрицами... Просто те задачи удобнее решать в разреженном виде.

А прямая решалка и плотную матницу сожрёт.

yz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.