Элементарные разреженные матрицы
Матрицы без нулевых значений называются полными матрицами. Матрицы, содержащие некоторое число элементов с нулевыми значениями, в MATLAB называются разреженными матрицами. Вообще говоря, разреженными называют те матрицы, для которых разумно использовать численные методы, учитывающие упрощение арифметических операций с нулевыми элементами (например, получение нуля при умножении на нуль или пропуск операций сложения и вычитания при использовании этих операций с нулевыми элементами матриц). Они широко используются при решении прикладных задач. Например, моделирование электронных и электротехнических линейных цепей часто приводит к появлению в матричном описании топологии схем сильно разреженных матриц. Для таких матриц создан ряд функций, обеспечивающих эффективную работу с ними и устраняющих тривиальные операции с нулевыми элементами матриц.
Вначале рассмотрим элементарные разреженные матрицы и относящиеся к ним функции системы MATLAB.
Функция spdiags расширяет возможности встроенной функции diag. Возможны четыре операции, различающиеся числом входных аргументов:
- [B.d] = spdiags(A) – извлекает все ненулевые диагонали из матрицы А размера mxn. В – матрица размера min(m,n)xp, столбцы которой р являются ненулевыми диагоналями A .d – вектор длины р, целочисленные элементы которого точно определяют номера диагоналей матрицы А (положительные номера – выше главной диагонали, отрицательные – ниже);
- В = spdiags(A.d) – извлекает диагонали, определенные вектором d;
- А = spdiags(B,d,A) – заменяет столбцами матрицы В диагонали матрицы А, определенные вектором d;
- А = spdiags(B,d,m,n) – создает разреженную матрицу размера mxn, размещая соответствующие столбцы матрицы В вдоль диагоналей, определяемых вектором d.
Пример:
>
>
A
=
[
1
3
4
6
8
0
0
;
7
8
0
7
0
0
5
;
0
0
0
0
0
9
8
;
7
6
54
32
0
9
6
];
>
>
d
=
[
1
322
]
>
>
B
=
spdlags(A.d)
B
=
3644
.
0077
0900
0699
- S = speye(m.n) – возвращает разреженную матрицу размера mxn с единицами на главной диагонали и нулевыми недиагональными элементами;
- S = speye(n) – равносильна speye(n.n). Пример:
>
>
S
=
speye(
4
)
S
=
(
1.1
)
1
(
2.2
)
1
(
3.3
)
1
(
4.4
)
1
Матрица R = sprand(S) имеет ту же структуру, что и разреженная матрица S, но ее элементы распределены по равномерному закону:
- R = sprand(m,n,density) – возвращает случайную разреженную матрицу размера mxn, которая имеет приблизительно densityxmxn равномерно распределенных ненулевых элементов (0<density<l);
- R = sprand(m,n,density,re) – в дополнение к этому имеет в числе параметров число обусловленности по отношению к операции обращения, приблизительно равное rс. Если вектор гс имеет длину lr (A,r<min(m.n)), то матрица R имеет гс в качестве своих первых 1 r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генерируется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами. Такие матрицы играют важную роль при анализе алгебраических и топологических структур.
Пример:
>
>
d
=
sprand(
4.3.0.6
)
d
=
(
1.1
)
0.6614
(
2.1
)
0.2844
(
4.1
)
0.0648
(
3.3
)
0.4692
(
4.3
)
0.9883
- R = sprandn(S) – возвращает матрицу со структурой разреженной матрицы S, но с элементами, распределенными по нормальному закону с нулевым средним и дисперсией, равной 1;
- R = sprandn(m,n,density) – возвращает случайную разреженную матрицу размера mxn, имеющую примерно densityxmxn нормально распределенных ненулевых элементов (0<density<l);
- R = sprandnCm,n.density,гс) – в дополнение к этому имеет своим параметром число обусловленности по отношению к операции обращения, приблизительно равное rс. Если вектор гс имеет длину 1r (Xr<min(m,n)), то матрица R имеет гс в качестве своих первых 1r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генерируется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами.
Пример:
>
>
f
=
sprandn(
3.4.0.3
)
f
=
(
2.1
)
-
0.4326
(
2.2
)
-
1.6656
(
2.3
)
0.1253
(
2.4
)
0.2877
- sprandsym(S) – возвращает случайную симметрическую матрицу, нижние под-диагонали и главная диагональ которой имеют ту же структуру, что и матрица 5. Элементы результирующей матрицы распределены по нормальному закону со средним, равным 0, и дисперсией, равной 1;
- sprandsym(n,density) – возвращает симметрическую случайную разреженную матрицу размера пхп, которая имеет приблизительно densityxnxn ненулевых элементов; каждый элемент сформирован в виде суммы нормально распределенных случайных чисел (0<density<l);
- R = sprandsym(n,density,гс) – возвращает матрицу с числом обусловленности по отношению к операции обращения, равным гс. Закон распределения не является равномерным; значения случайных элементов симметричны относительно 0 и находятся в пределах [-1, 1]. Если rс – вектор размера п, то матрица R имеет собственные значения, равные элементам вектора rс. Таким образом, если элементы вектора гс положительны, то матрица R является положительно определенной. В любом случае матрица R генерируется с помощью случайного вращения по Якоби диагональных матриц с заданными собственными значениями и числом обусловленности. Такие матрицы играют важную роль при анализе алгебраических и топологических структур;
- R = sprandsym(n.density.rc.klnd) – возвращает положительно определенную матрицу. Аргумент kind может быть следующим:
- kind=1 – матрица R генерируется из положительно определенной диагональной матрицы с помощью случайных вращений Якоби. R имеет точно заданное число обусловленности;
- kind=2 – матрица R генерируется как смещенная сумма матриц внешних произведений. Число обусловленности матрицы приблизительно, но структура более компактна (по сравнению с предыдущим случаем);
- kind=3 – генерируется матрица R той же структуры, что и S, а число обусловленности приближенно равно 1/гс. Значение density игнорируется.
Пример:
>
>
a
=
sprandsym(
4.0.3.0.8
)
a
=
(
1.1
)
0.9818
(
3.1
)
0.0468
(
2.2
)
-
0.9283
(
1.3
)
0.0468
(
3.3
)
0.8800
(
4.4
)
-
0.8000