Разреженные матрицы: sparce, spy, speye, spalloc
При использовании численных методов (метод конечных разностей, метод конечных элементов) часто возникают матрицы, в которых ненулевые элементы составляют лишь малую часть. Такие матрицы называются разреженными. Было бы нерационально тратить драгоценную память компьютера на запоминание огромного количества нулей. Рассмотрим пример.
A =
1 0 0 0 -1
0 2 0 0 0
0 0 1 0 0
0 0 0 2 0
0 4 0 0 1
В этой матрице из 25 чисел лишь семь ненулевых, то есть меньше одной трети. С увеличением размеров матриц эта доля, как правило, уменьшается. В матрице жесткости конструкции, возникающей при применении МКЭ, доля ненулевых элементов обычно менее 5-ти процентов.
Для хранения таких матриц в MATLAB’e используется специальная технология.
Выполните команду:
>> B = sparse(A)
B =
(1,1) 1
(2,2) 2
(5,2) 4
(3,3) 1
(4,4) 2
(1,5) -1
(5,5) 1
Команда sparse (sparse - редкий) изменяет порядок хранения матрицы. То есть матрица B – это та же самая матрица A, но для запоминания каждого ненулевого элемента используется одно вещественное значение (величина элемента) и два целых (номера строки и столбца, в которых располагается этот элемент). А нулевые элементы, таким образом, вообще не занимают памяти.
Обращаться с разреженной матрицей можно также, как и с обычной. Например, сложить с другой матрицей
>> A+B
ans =
2 0 0 0 -2
0 4 0 0 0
0 0 2 0 0
0 0 0 4 0
0 8 0 0 2
Все нюансы, возникающие при выполнении операций с разреженными матрицами (а они имеются) MATLAB решает сам. Вникать в них вам не обязательно. Единственное, что требуется от вас – это дать понять MATLAB’у, с какой матрицей следует обращаться как с разреженной, а с какой – как с обычной.
Для работы с разреженными матрицами имеется довольно много функций. Однако на настоящем этапе ограничимся только одной:
>> spy(A)
Эта функция (spy – подглядывать, подсматривать) дает графическое изображение расположения ненулевых элементов. Здесь, для матрицы размера 5х5 такое изображение мало, что дает. Однако в тех случаях, когда размер матрицы порядка сотен или даже тысяч, такая картинка дает очень ценную информацию о структуре матрицы.
Упражнения.
- Создайте обычным способом матрицу размера 6х6 с 7-8-ью ненулевыми элементами.
- Преобразуйте эту матрицу в разреженную
- Получите портрет матрицы
Задание
Найти решение системы линейных алгебраических уравнений . Матрицу A и вектор b взять по номеру своего варианта, заменяя значение n номером своего варианта.
Работу оформить в виде m-файла. Матрицу A следует создавать с использованием функций формирования матриц, имеющихся в системе MATLAB.
1–5. |
6–10. |
11–15. |
16–20. |
21–25. |
26–30. |