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

UptoLike

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

42 Глава 3. Программирование сборки матриц МКЭ
tbad1 = [ ] ; tbad2 = [ ] ; t be s t 1 = [ ] ; t b e s t 2 = [ ] ; t b e s t 3 = [ ] ; % ass emb lin g time
nt = [ ] ; np = [ ] ;
f o r nx=[10 50 100 200 400]
% s e t a r e g u l a r (nx+1)
*
(nx+1) mesh on r e c t a n g u l a r domain
[ p ,, t ]= poimesh (' sq uareg' , nx , nx ) ;
np=[np s i z e (p , 2 ) ] ; % number of mesh p o i n t s
nt =[ nt s i z e ( t , 2 ) ] ; % number of f i n i t e ele me nts
t i c , assembabad1 ( p , t ) ; tbad1 =[ tbad1 toc ] ;
t i c , assembabad2 ( p , t ) ; tbad2 =[ tbad2 toc ] ;
t i c , assembabest1 ( p , t ) ; t b e s t 1 =[ t b e s t 1 toc ] ;
t i c , assembabest2 ( p , t ) ; t b e s t 2 =[ t b e s t 2 toc ] ;
t i c , assembabest3 ( p , t ) ; t b e s t 3 =[ t b e s t 3 toc ] ;
end
disp (' np nt bad1 bad2 bes t 1 bes t 2 bes t 3' )
disp ( [ np' nt' tbad1' tbad2' tb est 1 ' tb est 2 ' tb est 3 ' ] )
В результате выполнения этой программы получена следующая таб-
лица.
np nt bad1 bad2 bes t 1 bes t 2 bes t 3
121 200 0 .03 1 25 0 .01 562 5 0 0 0
2601 5000 1 . 6719 1 . 1 719 0 .20 3 13 0 .01 562 5 0 .0 3125
10201 20000 23 . 516 22 .828 0 .79 6 88 0 . 093 75 0 . 0 937 5
40401 80000 381 .06 385 . 9 7 3 . 2344 0 . 453 1 3 0 .4 6 875
160801 320000
* *
13 . 1 2 5 2 .0 4 69 2 . 0 938
В последних пяти столбцах указано время выполнения соответству-
ющей программы в секундах CPU (поэтому при новом выполнении
программы эти цифры могут незначительно измениться).
В следующей таблице приведено относительное время выполне-
ния программ:
tbad1 /np^2= [ 2 1 . 2 . 5 2 . 3 2 . 3 ]
*
1 e7
t b e s t 1 /np = [ 0 7 . 8 7 . 8 8 . 0 8 . 2 ]
*
1 e5
t b e s t 2 /np = [ 0 0 . 6 0 . 9 1 . 1 1 . 3 ]
*
1 e5
t b e s t 3 /np = [ 0 1 . 2 0 . 9 1 . 2 1 . 3 ]
*
1 e5
Из этой таблицы с большим основанием можно заключить, что вре-
мя выполнения tbad1 программы bad1 практически пропорциональ-
но квадрату числа узлов (элементов), тогда как время выполнения
best1, best2, best3 пропорционально числу узлов (элементов); bad2
существенно короче bad1, но на подробных сетках не отличается от
нее по времени выполнения; best2, best3 не содержат циклов, поэтому
почти на порядок быстрее best1.
Таким образом, можно рекомендовать стиль программирования
42                                           Глава 3. Программирование сборки матриц МКЭ


tbad1 = [ ] ; tbad2 = [ ] ; t b e s t 1 = [ ] ; t b e s t 2 = [ ] ; t b e s t 3 = [ ] ; % a s s e m b l i n g time
nt = [ ] ; np = [ ] ;

f o r nx =[10 50 100 200 4 0 0 ]
   % s e t a r e g u l a r ( nx+1) * (nx+1) mesh on r e c t a n g u l a r domain
    [ p ,∼ , t ]= poimesh ( ' s q u a r e g ' , nx , nx ) ;
    np=[np s i z e ( p , 2 ) ] ;     % number o f mesh p o i n t s
    nt =[ nt s i z e ( t , 2 ) ] ;   % number o f f i n i t e e l e m e n t s

    t i c , assembabad1 ( p , t ) ; tbad1 =[ tbad1 t o c ] ;
    t i c , assembabad2 ( p , t ) ; tbad2 =[ tbad2 t o c ] ;
    t i c , assembabest1 ( p , t ) ; t b e s t 1 =[ t b e s t 1 t o c ] ;
    t i c , assembabest2 ( p , t ) ; t b e s t 2 =[ t b e s t 2 t o c ] ;
    t i c , assembabest3 ( p , t ) ; t b e s t 3 =[ t b e s t 3 t o c ] ;
end
disp ('         np      nt        bad1              bad2            best1        best2            best3')
d i s p ( [ np' nt ' tbad1 ' tbad2 ' t b e s t 1 ' t b e s t 2 ' t b e s t 3 ' ] )

В результате выполнения этой программы получена следующая таб-
лица.
     np          nt             bad1                bad2                best1         best2                 best3

     121         200           0 .03125         0 .015625          0                0                     0
     2601        5000          1 .6719          1 .1719            0 .20313         0 .015625             0 .03125
     10201       20000         23 . 5 1 6       22 . 8 2 8         0 .79688         0 .09375              0 .09375
     40401       80000         381 . 0 6        385 . 9 7          3 .2344          0 .45313              0 .46875
     160801      320000           *                *               13 . 1 2 5       2 .0469               2 .0938

В последних пяти столбцах указано время выполнения соответству-
ющей программы в секундах CPU (поэтому при новом выполнении
программы эти цифры могут незначительно измениться).
   В следующей таблице приведено относительное время выполне-
ния программ:
 tbad1 /np^2=         [21 .   2 .5   2 .3    2 .3           ] * 1 e−7
 t b e s t 1 /np =    [0      7 .8   7 .8    8 .0     8 . 2 ] * 1 e−5
 t b e s t 2 /np =    [0      0 .6   0 .9    1 .1     1 . 3 ] * 1 e−5
 t b e s t 3 /np =    [0      1 .2   0 .9    1 .2     1 . 3 ] * 1 e−5

Из этой таблицы с большим основанием можно заключить, что вре-
мя выполнения tbad1 программы bad1 практически пропорциональ-
но квадрату числа узлов (элементов), тогда как время выполнения
best1, best2, best3 пропорционально числу узлов (элементов); bad2
существенно короче bad1, но на подробных сетках не отличается от
нее по времени выполнения; best2, best3 не содержат циклов, поэтому
почти на порядок быстрее best1.
    Таким образом, можно рекомендовать стиль программирования