Смекни!
smekni.com

Розробка алгоритму та програми чисельного розвязку систем лінійних алгебраїчних рівнянь з розрідженою (стр. 5 из 9)

Пам'ять, використовувана для зберігання розріджених матриць, складається з двох частин: основної пам'яті, у якій утримуються числові значення елементів матриць, і додаткової пам'яті, де зберігаються вказівники, індекси і інша інформація, необхідна для формування структури матриць і яка забезпечує доступ до числових значень їх елементів при виконанні процедур формування і розв’язку СЛАР, тобто так звані списки зв'язності. Способи зберігання і використання даних, що зберігаються в основній і додатковій пам'яті, досить різноманітні і визначаються, головним чином, обраним методом розв’язку СЛАР. Для структурної побудови інформації, що зберігається в додатковій пам'яті – списків зв'язності – широко використовується теорія графів.

Особливо складні алгоритми роботи з розрідженими матрицями виникають при використанні прямих методів розв’язку. У першу чергу це пов'язане з тим, що при розкладанні розрідженої матриці A=LLT вона звичайно зазнає деякого заповнення, тобто нижній трикутний множник L має ненульові елементи в тих позиціях, де у вихідній матриці A стояли нулі (не виключено, що при цьому можуть з'явитися і нові нульові елементи). Крім того, прямі методи вимагають спеціальної нумерації вузлів кінцево-елементної сітки, яка забезпечує мінімальну ширину стрічки. Подібних проблем при використанні ітераційних методів не виникає [10,11].

У рамках даної роботи стосовно ітераційних методів розв’язку СЛАР викладені 2 алгоритми зберігання і використання розріджених матриць, які відрізняються простотою реалізації і високою обчислювальною ефективністю.

2.1 Перша схема

Матриця жорсткості, що виходить при застосуванні МСЕ, має симетричну структуру, що дозволяє в загальному випадку зберігати тільки верхню трикутну частину матриці. Однак для задач із великою кількістю невідомих це також приводить до проблеми нестачі пам'яті. Викладений у даній роботі метод дозволяє зберігати тільки ненульові члени матриці жорсткості. Суть його полягає в наступному.

Спочатку, з метою виявлення зв'язків кожного вузла з іншими, проводиться аналіз структури дискретизації області на КЕ. Наприклад, для КЕ-сітки, зображеної на рис. 2.1, відповідна структура зв'язків буде мати вигляд, зображений у табл. 2.1.

Таблиця 2.1 – Структура зв'язків КЕ-сітки

№ вузла 1 2 3 4 5 6 7
Зв'язки 1,2,5,6,7 1,2,3,6 2,3,4,6 3,4,5,6,7 1,4,5,7 1,2,3,4,6,7 1,4,5,6,7

Тоді для зберігання матриці жорсткості необхідно построчно запам'ятовувати інформацію про коефіцієнти, відповідні до вузлів, з якими зв'язаний даний вузол. На рис. 2.2 наведені матриця жорсткості і її компактний вигляд для сітки, зображеної на рис. 2.1 [9].

Текст програми, що реалізує викладений алгоритм аналізу структури КЕ-розбивки тіла, наведений у додатку А [12,13].


Даний спосіб компактного зберігання матриці жорсткості дозволяє легко його використовувати разом з яким-небудь чисельним методом. Найбільш зручним для цієї мети здається використання вищевикладеного ітераційного методу Ланцоша, тому що на кожній ітерації потрібно тільки перемножувати матрицю коефіцієнтів СЛАР і заданий вектор. Отже, для використання запропонованого методу компактного зберігання матриці СЛАР необхідно побудувати пряме і зворотнє перетворення в первісну квадратну матрицю.

Нехай aij – елемент первісної квадратної матриці розмірністю n×n, а

– її компактний вигляд. Тоді для зворотнього перетворення будуть слушні наступні співвідношення:


де m – кількість ступенів волі (m=1,2,3).

Для прямого перетворення будуть слушні співвідношення, зворотні до співвідношень (2.1) – (2.4).

2.2 Друга схема

При реалізації ітераційного розв’язку системи рівнянь

досить частою є ситуація, коли необхідно виконати множення матриці системи A на який-небудь вектор, наприклад, на вектор вузлових невідомих
або на вектор нев'язки
, де
[20]. Побудова добутків типу
або
є одним з вузьких місць ефективної реалізації всього ітераційного процесу розв’язку системи рівнянь, оскільки вимагає найбільших витрат процесорного часу. Нижче представлений алгоритм побудови добутку
і безпосередньо пов'язаний з ним спосіб компактного зберігання матриці A [14–16].


Рисунок 2.3 – Кінцево-елементна модель


Розглянемо як приклад кінцево-елементну модель, зображену на рис. 2.3. З кожним вузлом сітки зв'язане деяке число вузлів, які можуть бути розбиті на дві множини: першу множину становлять вузли, номери яких менше i – номера розглядаємого вузла, а друга множина – вузли, номери яких більше i. У табл. 2.2 зображена структура матриці СЛАР, відповідна до вузлових зв'язків кінцево-елементної моделі, представленої на рис. 2.3.

Таблиця 2.2 – Структура матриці СЛАР

1 2 3 4 5 6 7 8 9
1 a11 a12 a13 0 a15 a16 0 0 0
2 a21 a22 a23 0 a25 a26 0 0 0
3 a31 a32 a33 0 0 0 0 0 0
4 0 0 0 a44 a45 a46 a47 a48 a49
5 a51 a52 0 a54 a55 a56 0 0 a59
6 a61 a62 0 a64 a65 a66 0 0 a69
7 0 0 0 a74 0 0 a77 a78 a79
8 0 0 0 a84 0 0 a87 a88 a89
9 0 0 0 a94 a95 a96 a97 a98 a99

Матриця A зберігається у вигляді двох векторів (рис. 2.4):

– члени головної діагоналі,
– ненульові елементи, розташовані над головною діагоналлю. Для формування і використання елементів вектора
створюються додаткові чотири вектори, що містять інформацію про зв'язки вузлів кінцево-елементної моделі.
1 a11 1 a15
2 a22 2 a16
3 a33 3 a12
4 a44 4 a13
5 a55 5 a25
6 a66 6 a26
7 a77 7 a23
8 a88 8 a47
9 a99 9 a48
10 a49
11 a46
12 a45
13 a59
14 a56
15 a69
16 a78
17 a79
18 a89

Рисунок 2.4 – Структура векторного зберігання матриці A

Розглянемо i-е рівняння СЛАР

. У загальному випадку воно має вигляд:

де aij– елементи матриці A; fi– елемент вектора правої частини

; xj– елемент вектора невідомих
; N– число невідомих.