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

UptoLike

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

18 Глава 2. Построение сеток в MatLab
предположении, что А не содержит нулевых столбцов).
1)
[ i , j , a ] = fi n d (A) ; % get the c oo r di n a te form o f A ( i , j have no copy )
p = f i n d ( d i f f ( [ 0 ; j ; s i z e (A,2 ) + 1 ] ) ) '
p =
1 3 5 6
Проверим этот код на предыдущем примере:
f o r j = 1 : n
f p r i n t f (' j=%d : \ n i a\n' , j ) ;
di s p ( [ i ( p ( j ) : p( j +1)1) a ( p ( j ) : p ( j +1) 1)])
end
j =1:
i a
1 1
3 2
j =2:
i a
1 3
2 4
j =3:
i a
3 5
Разберем 2) способ, учитывая внутреннее хранение А. Рассмотрим
код
A=sp a r s e ( n , n ) ; % 1)
. . . .
A( i1 , j 1 )=a1 ; % 2)
. . . .
A( i2 , j 2 )=a2 ; % 3)
. . . .
Команда 1) определяет матрицу A размера nхn, массивы (i, p, a),
определяющие формат ее хранения, являются пустыми. На шаге 2)
включается элемент а1, происходит формирование массивов (i, p, a).
На 3-ем шаге включается новый элемент а2, что приводит к пере-
формированию векторов (i, p, a): они меняют длину, выделяется па-
мять для них, части старых (i, p, a) копируются, вставляется новый
элемент и т.д. Этот способ, как видим, оказывается дорогим, если
nnz(A) число ненулевых элементов А, является большим числом.
Очевидный метод реализации 3) способа основывается на упоря-
дочении триплета (i, j, a) по возрастанию индекса i, суммирования
1)
если x = [x
1
, . . . , x
n
], то вектор y = dif f(x) имеет координаты x
i+1
x
i
, i = 1, . . . , n 1.
18                                                              Глава 2. Построение сеток в MatLab


предположении, что А не содержит нулевых столбцов).1)
[ i , j , a ] = f i n d (A ) ; % g e t t h e c o o r d i n a t e form o f A ( i , j have no copy )
p = f i n d ( d i f f ( [ 0 ; j ; s i z e (A, 2 ) + 1 ] ) ) '

p =
           1        3        5        6

Проверим этот код на предыдущем примере:
for j = 1:n
    f p r i n t f ( ' j=%d : \ n        i        a \n' , j ) ;
    d i s p ( [ i ( p ( j ) : p ( j +1)−1) a ( p ( j ) : p ( j +1) −1)])
end

j =1:
           i        a
           1        1
           3        2
j =2:
           i        a
           1        3
           2        4
j =3:
           i        a
           3        5

         Разберем 2) способ, учитывая внутреннее хранение А. Рассмотрим
код
A=s p a r s e ( n , n ) ;   % 1)
. . . .
A( i 1 , j 1 )=a1 ;         % 2)
. . . .
A( i 2 , j 2 )=a2 ;         % 3)
. . . .

Команда 1) определяет матрицу A размера nхn, массивы (i, p, a),
определяющие формат ее хранения, являются пустыми. На шаге 2)
включается элемент а1, происходит формирование массивов (i, p, a).
На 3-ем шаге включается новый элемент а2, что приводит к пере-
формированию векторов (i, p, a): они меняют длину, выделяется па-
мять для них, части старых (i, p, a) копируются, вставляется новый
элемент и т.д. Этот способ, как видим, оказывается дорогим, если
nnz(A) — число ненулевых элементов А, является большим числом.
   Очевидный метод реализации 3) способа основывается на упоря-
дочении триплета (i, j, a) по возрастанию индекса i, суммирования
   1)
        если x = [x1 , . . . , xn ], то вектор y = dif f (x) имеет координаты xi+1 − xi , i = 1, . . . , n − 1.