ВУЗ:
Составители:
§ 1. Cоздание и хранение разреженных матриц 17
i = [1 3 1 2 3 ] ;
j = [ 1 1 2 2 3 ] ;
a = [ 1 2 3 4 5 ] ; % ( i , j ) a i s the c o o r d i n a t e form o f A.
A = s p a r s e ( i , j , a , 3 , 3 ) ; % se t А.
Здесь i, j могут быть как строками, так и столбцами с целыми поло-
жительными элементами. Более того, индексы не обязательно долж-
ны быть упорядочены, среди пар (i, j) могут быть совпадающие.
В этом случае соответствующие им элементы a будут просумми-
рованы при формировании A. Эта возможность позволяет форми-
ровать матрицу посредством накопления ее элементов. Например,
A(1,1)=0.3+0.7=1. Тогда следующий код сформирует матрицу из
предыдущих примеров
i = [ 1 1 3 1 2 3 ] ;
j = [ 1 1 1 2 2 3 ] ;
a = [ 0 . 3 0 . 7 2 3 4 5 ] ;
A = s p a r s e ( i , j , a , 3 , 3 ) ;
Отметим, что a) i, j, a могут быть заданы как двумерные матрицы: в
этом случае в функции sparse они будут восприниматься как вектор
столбцы (как это принято в MatLab, согласно схеме хранения матриц
по столбцам); b) аргумент a может быть скаляром: в этом случае он
расширяется до вектора нужной длины с элементами равными этому
скаляру.
Для больших разреженных матриц предпочтение необходимо от-
дать способу 3). Разница между 2) и 3) способом становится ясным,
если разобраться с “внутренним” способом хранения разреженных
матриц. Разреженные матрицы в MatLab хранятся в “упорядочен-
ном столбцевом разреженном формате”. А именно, n × n матрица A
представляется тремя массивами (i, p, a), где в i хранятся строчные
индексы ненулевых элементов, которые перечисляются по порядку по
столбцам, в a хранятся сами ненулевые элементы, в p хранятся указа-
тели на те позиции в i, с которых начинается новый столбец. Таким
образом, упорядоченные по возрастанию строчные индексы ненуле-
вых элементов в j-том столбце хранятся в i
(
p(j) : p(j + 1) − 1
)
, а их
значения в a
(
p(j) : p(j + 1) − 1
)
; у пользователя не имеется доступа
к этим массивам. Отметим, что массивы i, a те же, что и в коорди-
натной форме. Следующий код позволяет получить указатели p (в
§ 1. Cоздание и хранение разреженных матриц 17 i = [1 3 1 2 3 ] ; j = [1 1 2 2 3 ] ; a = [1 2 3 4 5 ] ; % ( i , j ) a i s t h e c o o r d i n a t e form o f A. A = s p a r s e ( i , j , a , 3 , 3 ) ; % s e t А. Здесь i, j могут быть как строками, так и столбцами с целыми поло- жительными элементами. Более того, индексы не обязательно долж- ны быть упорядочены, среди пар (i, j) могут быть совпадающие. В этом случае соответствующие им элементы a будут просумми- рованы при формировании A. Эта возможность позволяет форми- ровать матрицу посредством накопления ее элементов. Например, A(1,1)=0.3+0.7=1. Тогда следующий код сформирует матрицу из предыдущих примеров i = [1 1 3 1 2 3]; j = [1 1 1 2 2 3]; a = [0 .3 0 .7 2 3 4 5]; A = sparse ( i , j ,a ,3 ,3); Отметим, что a) i, j, a могут быть заданы как двумерные матрицы: в этом случае в функции sparse они будут восприниматься как вектор столбцы (как это принято в MatLab, согласно схеме хранения матриц по столбцам); b) аргумент a может быть скаляром: в этом случае он расширяется до вектора нужной длины с элементами равными этому скаляру. Для больших разреженных матриц предпочтение необходимо от- дать способу 3). Разница между 2) и 3) способом становится ясным, если разобраться с “внутренним” способом хранения разреженных матриц. Разреженные матрицы в MatLab хранятся в “упорядочен- ном столбцевом разреженном формате”. А именно, n × n матрица A представляется тремя массивами (i, p, a), где в i хранятся строчные индексы ненулевых элементов, которые перечисляются по порядку по столбцам, в a хранятся сами ненулевые элементы, в p хранятся указа- тели на те позиции в i, с которых начинается новый столбец. Таким образом, упорядоченные по возрастанию строчные( индексы ненуле- ) вых элементов( в j-том столбце хранятся ) в i p(j) : p(j + 1) − 1 , а их значения в a p(j) : p(j + 1) − 1 ; у пользователя не имеется доступа к этим массивам. Отметим, что массивы i, a те же, что и в коорди- натной форме. Следующий код позволяет получить указатели p (в
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »