И другие программы этой серии
Часто такими матрицами яв
ляются матрицы с 1–3 диагоналями, заполненными ненулевыми элементами и
имеющими остальные нулевые элементы. Сильно разреженные матрицы имеют
большую часть элементов с нулевыми значениями.
Строго говоря, разреженными называют те матрицы, при работе с которыми
используются численные методы, учитывающие упрощение арифметических
операций с нулевыми элементами (например, получение нуля при умножении на
нуль или пропуск операций сложения и вычитания при использовании этих опе
раций с нулевыми элементами матриц). Применение таких операций уменьшает
время, затрачиваемое на обработку матриц и вычисления с ними.
Разреженные матрицы имеют специальную структуру для исключения хране
ния нулевых элементов. Например, могут храниться только ненулевые элементы
в виде чисел двойной точности и их целочисленные индексы или, точнее, диапазоны
индексов. Уже одно это уменьшает размеры разреженной матрицы порою во много
раз. Кроме того, фактически разреженные матрицы развертываются по столбцам
в одномерные массивы, что упрощает индексацию ненулевых элементов – вместо
указания двух индексов произвольного элемента достаточно указать один индекс.
Детали упаковки разреженных матриц большинству пользователей не важны.
Разреженные матрицы широко используются при решении прикладных задач.
Например, моделирование электронных и электротехнических линейных цепей
часто приводит к появлению в матричном описании топологии схем сильно разре
женных матриц. Для таких матриц создан ряд функций, обеспечивающих эффек
тивную работу с ними и устраняющих тривиальные операции с нулевыми элемен
тами матриц [45, 49].
• [B,d] = spdiags(A) извлекает все ненулевые диагонали из матрицы A
размера m?n. B – матрица размера min(m,n)? p, столбцы которой ? явля
ются ненулевыми диагоналями A. d – вектор длины p, целочисленные эле
менты которого точно определяют номера диагоналей матрицы A (положи
тельные номера – выше главной диагонали, отрицательные – ниже);
• B = spdiags(A,d) извлекает диагонали, определенные вектором d;
• A = spdiags(B,d,A) заменяет столбцами матрицы B диагонали матрицы
A, определенные вектором d;
• A = spdiags(B,d,m,n) создает разреженную матрицу размера m?n, раз
мещая соответствующие столбцы матрицы A вдоль диагоналей, определяе
мых вектором d.