![]() |
|||||
![]() ![]() |
|||||
![]() |
![]() |
![]() |
![]() |
![]() |
|
|
Описание работы с библиотекой Boost::uBLAS и вычисления обратной матрицыПодробно работа с матрицами и метод наименьших квадратов разбирается в лабораторной работе №2. Описание работы с библиотекой BoostВ данной работе для операций с матрицами используется свободно распространяемая библиотека uBLAS из состава набора библиотек Boost. Версия Boost 1.55.0, версия для Visual Studio 2019. Документация по библиотеке uBLAS 1.55.0 на официальном сайте www.boost.org.. Документация по библиотеке uBLAS 1.32.0 на русском языке. Установка библиотеки
Вычисление обратной матрицыСтандартными средствами библиотеки 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; Примеры использования матричных операций// создание матрицы (пустой конструктор) 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); |