Программный инструментарий обработки разреженных матриц
Программный инструментарий обработки разреженных матриц
Малинский А. МГТУ им. Н.Э. Баумана
malanto@mail.ru Русакова З.Н. МГТУ им. Н.Э. Баумана z.n.rusakova@mail.ru
Аннотация
Разработана библиотека программ обработки разреженных матриц для выполнения алгебраических операций. Предлагается модификация стандартных алгоритмов, использующих координатный формат представления, с использованием поразрядной сортировки по координатам. Такой подход позволяет легко переходить от представления разреженного строчного формата к столбцевому - формату, что обеспечивает эффективность и простоту алгоритмов умножения и транспонирования. Разработан простой и понятный интерфейс пользователя.
1 Введение
Разреженные матрицы применяются в решении многих практических задач [1,2]. Для работы с разреженными матрицами существует большое количество прикладных пакетов программ. Особенность предлагаемой программы в наличии возможности ознакомиться с основами вычислений с разреженными матрицами с использованием интуитивно понятного и очень простого интерфейса и оптимизации вычислений. Разреженной называется матрица, в которой число ненулевых элементов существенно меньше, чем полное количество элементов матрицы. Под операциями с разреженными матрицами будем понимать:1) формирование разреженной матрицы; 2) заполнение разреженной матрицы поэлементно; 3) считывание матрицы из файла;4) генерацию случайной матрицы, соответствующей задаваемым ограничениям; 5) вывод матрицы в определенном формате; 6) сохранение матрицы в файл; 7) вычисление количества ненулевых элементов; 8) вычисление модуля и скалярного произведения (операция предусмотрена для одномерных матриц, но может быть применена к любым); 9) алгебраические операции (в том числе, сложение матриц, вычитание матриц, умножение на константу, перемножение матриц, возведение в натуральную степень,;
2 Представление данных в памяти и реализация основных операций
В разработанной системе используется координатный формат (Coordinate Storage) хранения разреженных матриц, как самый простой в понимании и реализации форматов хранения. В этом формате, для каждого элемента хранятся: его значение и все его координаты. Матрица представляется в виде трех массивов, первый из которых хранит значения ненулевых элементов матрицы, второй и третий номера строк и столбцов этих элементов. В работе данные в памяти представ ляют-ся в виде динамического массива записей. Каждая запись содержит поле со значением элемента матрицы и статический массив координат элемента. Размер этого массива определяется размерностью матрицы. Размерность матрицы задается при считывании матрицы из файла, или вручную. Генерация матрицы происходит по следующему алгоритму:
1) Выделяется память под новые элементы массива. 2) Новые элементы генерируются случайным образом с учетом наложенных ограничений. 3) Новый массив выводится в соответствующее поле.
В алгоритме используется поразрядная сортировка, т.к. время ее работы пропорционально количеству бит в массиве. Её алгоритм:
1) для данного (изначально старшего) разряда: все элементы, содержащие в нем «0» переносятся в начало массива, а содержащие «1» в конец.
2) Далее переходим к следующему разряду. Рассматривая отдельно каждый участок, где в предыдущем разряде «0» и «1».
3) Сортировка выполняется последовательно для каждой координаты.
Алгоритм вычисления линейной комбинации работает аналогично алгоритму сортировки слиянием. Принцип работы:
1) Сначала элементы матриц сортируются по возрастанию координат
Новые информационные технологии в автоматизированных системах - 2018
2) Затем матрицы «сливаются»: берется первый элемент первой матрицы и первый элемент второй матрицы:
Если их координаты совпали, их значения складываются и записываются в матрицу результата. Следующая пара формируется из следующих элементов матриц.
Если координаты не совпали, то результат -элемент с меньшими координатами, а элемент с большей координатой рассматривается в следующей паре.
Скалярное произведение вычисляется аналогичным образом. При вычислении скалярного произведения многомерных матриц программа рассматривает их как одномерные вектора, т.е. скалярное произведение матриц рассматривается как сумма произведений элементов с одинаковыми координатами.
1) Сначала элементы матриц сортируются по возрастанию координат
2) Затем матрицы «сливаются»: берется первый элемент первой матрицы и первый элемент второй матрицы:
Если их координаты совпали, их значения скалярно умножаются и произведение прибавляется к ответу. Следующая пара формируется из следующих элементов матриц.
Если координаты не совпали, то элемент с меньшими координатами заменяется на следующий в той же матрице. Новая пара рассматривается заново.
Умножение матрицы на вектор выполняется по следующему алгоритму: 1) Сначала элементы матрицы и вектора независимо сортируются по возрастанию координат 2) Затем для каждой строки матрицы вычисляется ее скалярное произведение на этот вектор и записывается в соответствующую ячейку.
Сортировка, указанная в п.1 позволяет расположить элементы вектора друг за другом по возрастанию координат, а элементы матрицы, стоящие в одной строке, будут находиться рядом друг с другом в порядке возрастания номеров столбцов.
Перемножение матриц выполняется по схожему алгоритму:1) Сначала матрицы сортируются по возрастанию координат, только А сортируется с большим приоритетом по второй координате, а В с большим приоритетом по первой координате (Рис.2).
2) Затем формируется матрица произведения: для каждой пары элементов исходных матриц А(х, 1) и В(1 у) создается ячейка С(х,у), значение которой будет равно А(х,г)*В(г,у) (Рис. 3).
А
2, 0
(3
(0
(1
(0
(1
(3
(1
12 8 6 2 11 10 9 11
в
(0, 2) (0, 3) (1, 0) (1, 1) (1, 2) (1, 3) (2, 0) (2, 1) (3, 2) (2, 2) (2, 3)
2
13
7
4
5
6 3 2 2
7
8
Рис.2 Схема сортировки перед перемножением матиц.
А
(2, 0) 12
(3, 0) 8
(0, 1) 6
(1, 1) 2
(0, 2) 11
(1, 2) 10
(3, 2) 9
(1, 3) 11
С=А*В
(0, 0) 11*3
(0, 1) 10*9
(1, 0) 11*3
(1, 1) 10*9
(3, 0) 9*3
(3, 1) 9*9
В
(0, 1) 9
(0, 2) 7
(0, 3) 25
(1, 0) 7
(1, 1) 4
(1, 3) 3
(2, 0) 3
|2, 1) 9
(3, 0) 6
(3, 1) 11
(3, 3) 5
Рис. 3. Схема перемножения матриц.
3). В формируемой матрице возможно появление нескольких элементов с одинаковыми координатами. Что бы слить вместе такие элементы, программа сортирует матрицу результата по возрастанию координат. Таким образом, элементы с равными координатами оказываются рядом друг с другом. После этого значения элементов с равными координатами суммируются. В результате получается произведение матриц:
( 0 0
12 0 8 0
0 ^ 11 0 0
(0 7 3 6
7 25^|
( 75 110 0
27
123 0 219 0 108 84
18 ^ 61 300
153 56 200
Рис. 4. Портрет произведения матриц.
Ниже приводится окно вывода результата на Рис. 5.
х
Программный инструментарий обработки разреженных матриц
Программа может достаточно быстро перемножать, складывать, вычитать большие разреженные матрицы с десятками-сотнями тысяч ненулевых элементов. Просмотр достаточно больших массивов числовых данных выполняется по частям, выводится по 100 первых элементов.
Окно настройки параметров генерируемой матрицы и создания на Рис. 7
® Генерация
Количество элементов
I™-
Диапазон значений
От [о До [15
Г~ Все значения целые Координаты элемента не более
15-
Создать
0
1_1
Рис.5 - Результат перемножения матриц.
3 Описание интерфейса пользователя
Ниже приводятся основные окна интерфейса.
Разреженные матрицы 1-И-1
т'
Ш; 1,
1В|= АВ= п - 1 », |
Рисунок 6 - Основной экран интерфейса.
1) Поле, куда выводится информация о матрицах и их скалярное произведение, эти данные обновляются при нажатии на кнопку под полем.
2) Поля, куда выводятся две тестовые матрицы.
3) Результат операций с матрицами и одновременно буфер обмена.
4) Контекстно зависимый набор кнопок, который позволяет совершать указанные на них действия над матрицами.
5) Контекстно зависимый набор кнопок, который позволяет совершать указанные на них операции над матрицами, где М - редактируемая матрица.
6) Поле для ручного дополнения выбранной матрицы и поля с контекстно зависимыми подсказками. Программа игнорирует нецифровые символы, при вводе, программа выводит введенный элемент так, как она его видит в режиме реального времени.
7) Кнопка, позволяющая отсортировать все элементы всех матриц по координатам для удобства представления данных и устранения элементов координаты которых совпадают.
Рис.7 Экран настройки генерируемой матрицы. Окно редактирования матрицы - на рис. 8
я? Редактирование матрицы А 0ВВ
Удая я ем [0, 3): 8
(1-0) 14
Удаляем [1,1): 10
| Уда ля ем [1 2): 17
(1.3 Б
10
4
5
8
8
Рис. 8 - Экран удаления элементов матрицы
Матричные операции определяются в окне алгебры матриц (Рис. 9)
.А? Линейная комбинация
Как комбинировать матрицы?
|э А + |9,5| Е
3 А + 9,5В ?
Комбинировать
Рис. 9 -Экран линейной комбинации матриц.
Цифрами обозначены:
1) Поля для ввода коэффициентов
2) Поле, где система выводит введенные значения так, как она их воспринимает.
3) Кнопка «Комбинировать»
Новые информационные технологии в автоматизированных системах - 2018
Идея сортировки матрицы по разным полям (по индексам столбцов или строк) позволяет легко переходить от представления разреженного строчного формата к разреженному столбцевому формату, что упрощает алгоритмы транспонирования и умножение матриц и векторов.
Результаты разработки работы программы представлены ниже (Рис.10)
г
Рис.10 - Экран вывода результата матричных операций.
4 Заключение
Разработан программный инструментарий обработки разреженных матрицами, который позволяет выполнять алгебраические операции с разреженными матрицами, складывать, вычитать, умножать на константу, перемножать между собой разработан алгоритм генерации разреженных случайных матриц. Программа может использоваться как калькулятор матричных вычислений.
Список литературы
Писсанецки С. Технология разреженных матриц. — М.: Мир, 1988.
Тьюарсон Р. Разреженные матрицы. - М.: Мир, 1977