MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

MATLAB\MATLAB

В.Г.Потемкин "Справочник по MATLAB"
Работа с разреженными матрицами

  В оглавление книги \ К следующему разделу \ К предыдущему разделу

Элементарные разреженные матрицы

SPARSE
Формирование разреженной матрицы

Синтаксис:

            S = sparse(i, j, s, m, n, nzmax)
            S = sparse(i, j, s, m, n)
            S = sparse(i, j, s)
            S = sparse(m, n)
            S = sparse(A)

Описание:

Функция sparse - это встроенная функция, которая формирует матрицы в соответствии с правилами записи разреженных матриц, принятыми в системе MATLAB; количество входных аргументов этой функции - от 1 до 6.

Функция S = sparse(A) преобразовывает полную матрицу в разреженную, удаляя из описания нулевые элементы; если исходная матрица разреженная, то sparse(S) возвращает S.

Общая форма функции S = sparse(i, j, s, m, n, nzmax) использует строки массива [i j s] для формирования разреженной матрицы размера m х n с ненулевыми элементами, количество которых не превышает nzmax. Векторы i и j задают позиции элементов и являются целочисленными, а вектор c определяет числовое значение элемента матрицы, которое может быть действительным или комплексным. При формировании разреженной матрицы все строки вида [i j 0] из описания удаляются. Длина результирующего вектора s точно совпадает с количеством ненулевых элементов разреженной матрицы.

При формировании разреженной матрицы допускается использовать меньшее число входных аргументов, чем это требуется, а также ряд других упрощений. Так, один из аргументов i, j или s может быть скаляром, но при этом система MATLAB сама дополнит такой вектор до требуемой длины, которая определяется другими элементами.

Обращение вида S = sparse(i, j, s, m, n) предполагает по умолчанию, что nzmax = lenght(s).

Обращение вида S = sparse(i, j, s) предполагает, что m = max(i) и n = max(j); эти функции вычисляются раньше, чем будут удалены строки с нулевыми значениями s.

Обращение вида S = sparse(m, n) резервирует пространство для разреженной матрицы и равносильно обращению sparse([ ], [ ], [ ], m, n, 0), где все m х n элементов являются нулевыми.

Над разреженными матрицами могут совершаться любые арифметические, логические и индексные операции, то же справедливо и для смешанных операндов - полных и разреженных массивов. Операции с однородными операндами возвращают тот же тип операнда; в случае смешанных операндов, как правило, возвращается полный тип, за исключением случаев, когда в явном виде сохраняется разреженный тип. Например, при поэлементном умножении массивов A .* S, где S - разреженный массив.

Некоторые операции, например S >= 0, приводят к генерации так называемых BS(Big Space)-матриц, которые имеют разреженную структуру, но очень большое количество нулевых элементов.

Примеры:

Функция S = sparse(1:n, 1:n, 1) формирует единичную матрицу n х n с разреженной структурой и коэффициентом заполнения 1/n. Тот же результат может быть получен с помощью оператора S = sparse(eye(n, n)), но при этом промежуточная матрица будет иметь полную структуру.

Массив вида B = sparse(10000, 10000, pi), состоящий из одного элемента, вероятно, не очень полезен, но такое обращение допустимо. Не пытайтесь применить функцию full(B), вам потребуется 800 М памяти.

Следующая последовательность операторов сначала определяет структуру, а затем формирует разреженную матрицу.

               [i, j, s] = find(S);
               [m, n] = size(S);
               S = sparse(i, j, s, m, n);

Сопутствующие функции: FULL, FIND, SPY, NONZEROS, NNZ, NZMAX, DIAG, SPONES, SPRANDSYM.

  В оглавление книги \ К следующему разделу \ К предыдущему разделу

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика