Поскольку
разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций
для работы с ними:
nnz(X)
— возвращает число ненулевых элементов матрицы X. Плотность разреженной
матрицы определяется по формуле nnz(X)/numel (X). Пример:
h
= sparse(hilb(10));
» nnz(h)
ans =
100
nonzeros(A)
— возвращает полный вектор-столбец ненулевых элементов матрицы А, выбирая
их последовательно по столбцам. Эта функция дает только выход s, но не значения
i и j из аналогичного выражения [i, j,s]=find(A). Вообще, length(s)=nnz(A)xnzmax(A)xprod(size(A)).
Пример:
»
g=nonzeros(sparse(hankel([1,2.8])))
g
=
1
2
nzmax(S)
— возвращает количество ячеек памяти для ненулевых элементов. Обычно функции
nnz(S) и nzmax(S) дают один и тот же результат. Но если S создавалась в
результате операции над разреженными матрицами, такой как умножение или
LU-разложение, может быть выделено больше элементов памяти, чем требуется,
и nzmax(S) отражает это. Если S — разреженная матрица, то nzmax(S) — максимальное
количество ячеек для хранения ненулевых элементов. Если S — полная матрица,
то nzmax(S)=numel(S).
Пример:
»
q=nzmax(sparse(hankel([1.7.23])))
q
=
6
S=spalloc(m,n,nzmax)
— создает массив для разреженной матрицы S размера mxn с пространством для
размещения nzmax ненулевых элементов. Затем матрица может быть заполнена
по столбцам;
spalloc(m,n,nzmax)
— эквивалентна функции sparse([ ],[ ],[ ],m,n,nzmax).
Пример:
»
S = spalloc(5,4,5);
spfun
— вычисление функции для ненулевых элементов. Функция spfun применяется
выборочно только к ненулевым элементам разреженной матрицы, сохраняя при
этом разреженность исходной матрицы;
f = spfun(@function,S)
— вычисляет function(S) для ненулевых элементов матрицы S. Имя function
— это имя m-файла или встроенной в ядро функции. function должна работать
с матричным аргументом S и вычислить функцию для каждого элемента матрицы
S.