|
1. Описание работы с библиотекой BoostВ разделе приводится пример использования свободно распространяемая библиотека uBLAS из состава набора библиотек Boost www.boost.org. 1.1. Установка и подключение библиотеки
1.2. Пример работы с матрицамиВ библиотеке есть много полезных функций, рассмотрим например, работу с матрицами. // создание матрицы (пустой конструктор) boost::numeric::ublas::matrix<double> A; // изменение размеров матрицы (значение существующих элементов сохраняются) A.resize(3,3); // создание матрицы с заданными размерами boost::numeric::ublas::matrix<double> B(3,3), C(3,3); // кол-во строк матрицы int i=A.size1(); // кол-во столбцов матрицы int j=A.size2(); // сложение и вычитание матриц (сложение и вычитание векторов – аналогично) C = A + B; C = A - B; C = -A; C += A; C -= A; // умножение/деление матрицы на число ( умножение/деление вектора на число – аналогично) double x; C = x * A; C = A * x; C = A / x; C *= x; C /= x; // произведение матриц и векторов boost::numeric::ublas::vector<double> v(3), w; w = prod(A, v); w = prod(v, A); C = prod(A, B); // транспонирование матрицы C = trans(A); Вычисление обратной матрицыСтандартными средствами библиотеки uBLAS обращения матрицы не реализовано, но можно использовать вычисление обратной матрицы, сделанное на ее основе. Для этого скопируйте в папку с вашим проектом файл inverse.h . Пример///////////////////////////////////////////////////////////////////////////// // Тест: проверка работы библиотеки boost // // Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru // Университет ИТМО ///////////////////////////////////////////////////////////////////////////// #include <iostream> #include "boost/numeric/ublas/matrix.hpp" #include "boost/numeric/ublas/vector.hpp" using namespace boost::numeric::ublas; #include "inverse.h" ////////////////////////////////////////////////////////////////////////////// // вывод на экран матрицы 2х2 void print_matrix_2_2(const std::string& sText, boost::numeric::ublas::matrix<double> a) { std::cout<<sText<<std::endl; std::cout<<a(0,0)<<" "<<a(0,1)<<std::endl; std::cout<<a(1,0)<<" "<<a(1,1)<<std::endl<<std::endl; } ///////////////////////////////////////////////////////////////////////////// void main() { // Начальная инициализация матрицы a boost::numeric::ublas::matrix<double> a(2,2); a(0,0)=1.; a(0,1)=2.; a(1,0)=3.; a(1,1)=4.; print_matrix_2_2("a:", a); // матрица b - единичная boost::numeric::ublas::matrix<double> b(2,2); b(0,0)=1.; b(0,1)=0.; b(1,0)=0.; b(1,1)=1.; print_matrix_2_2("b:", b); // перемножение двух матриц boost::numeric::ublas::matrix<double> c = prod(b, a); print_matrix_2_2("c=a*b:", c); // результат обращения матрицы a записан в матрицу b bool flag = false; |