Программирование МКЭ в МATLAB. Даутов P.З. - 17 стр.

UptoLike

Составители: 

§ 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 (в