Смекни!
smekni.com

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

У рівнянні (2.5) присутні суми добутків двох типів. Перша сума складається з добутків елементів aij – матриці A і елементів вектора невідомих

, у яких j<i, а для добутків другої суми маємо j>i. Для побудови добутків першої суми використовуються вектори
і
, приклад структури яких показаний на рис. 2.5. У векторі
зберігаються номери тих вузлів, які пов'язані з даним розглядаємим вузлом, і їх номера менше номера даного вузла. Наприклад, розглянемо вузол з номером 5 (див. рис. 2.3). Цей вузол входить в елементи з номерами 2 і 3. У силу цього він має зв'язок з вузлами 4, 2 і 1, номера яких менше 5. Номера цих вузлів записуються у вектор
у послідовності, визначеній номерами елементів і правилом обходу їх вузлів. На рис. 2.3 стрілками показаний початок і напрямок обходу вузлів елементів. Цим пояснюється порядок появи номерів 4, 2 і 1 у векторі
. У векторі
зберігаються номери індексів, що координують у векторі
розташування номера першого вузла всього масиву номерів вузлів, пов'язаних з розглядаємим вузлом. Наприклад, як видно на рис. 2.3, масив вузлів, пов'язаних з вузлом 5, починається з індексу 6. Останній індекс масиву визначається початковим індексом вузла, наступного за розглянутим мінус одиницю. Наприклад, для вузла 5 останній індекс масиву у векторі
рівний 8=9-1, де номер 9 визначає початок масиву вузлів для вузла 6 (див. рис. 2.3).

Зовсім аналогічно будуються ще два вектори

і
, що містять інформацію про номери вузлів, пов'язаних з даним розглядаємим вузлом, але номера яких більше номера даного вузла. На рис. 2.5 зображено приклад конструкції зазначених векторів стосовно до кінцево-елементної моделі, зображеної на рис. 2.3. У векторі
вказується початковий індекс, що фіксує початок списку вузлів, розміщених у векторі
і пов'язаних з розглядаємим вузлом.
1 17 1 1 1 1 1 5
2 1 2 1 2 5 2 6
3 2 3 2 3 0 3 2
4 0 4 4 4 8 4 3
5 4 5 2 5 13 5 5
6 7 6 1 6 15 6 6
7 11 7 4 7 1 7 3
8 12 8 5 8 18 8 7
9 13 9 2 9 8
10 1 10 9
11 4 11 6
12 7 12 5
13 7 13 9
14 8 14 6
15 4 15 9
16 6 16 8
17 5 17 9
18 9

Рисунок 2.5 – Структура векторів-вказівників

У тих рідких випадках, коли той або інший розглядаємий вузол кінцево-елементної моделі не має зв'язку з вузлами, номера яких менше або більше номера даного вузла, тоді у відповідні гнізда векторів

або
заносяться нулі. Наприклад, вузол 4 (див. рис. 2.3) не має зв'язку з вузлами, номера яких менше 4, це враховується записом нуля в гніздо 4 вектора
(рис. 2.5). Вузол 3 не має зв'язку з вузлами, номера яких більше 3 – цій обставині відповідає запис нуля в гніздо 3 вектора
. Виключення становить запис в 1-е гніздо вектора
, куди заноситься номер останнього гнізда вектора
. Для всіх інших вузлів ці параметри визначаються тривіально. Для кожної кінцево-елементної моделі інформаційні вектори будуються один раз – відразу ж після того, як закінчена побудова масиву, що описує кінцеві елементи сітки.

Структура вектора

(див. рис. 2.4) у значній мірі повторює структуру вектора
. Ненульові наддіагональні елементи aij матриці A зберігаються у векторі
порядково, а порядок їх розміщення в межах рядка визначається порядком розміщення індексів у векторі
.

Тепер розглянемо побудову сум добутків, що входять у рівняння (2.5). Розгляд почнемо з другої суми, а саме:

При фіксованому індексі i визначаються номери першого і останнього гнізд вектора

, у яких розміщаються номери вузлів, пов'язаних з j-м вузлом, і для яких j>i. Наприклад, для вузла 5 (див. рис. 2.3) маємо: номер 1-го гнізда 13, а номер останнього гнізда 14=15-1. Номера першого і останнього гнізд визначають у векторі
діапазон розміщення ненульових елементів матриці A, які приймають участь у добутках суми (2.6). Крім того, ці ж номера гнізд визначають у векторі
діапазон розміщення номерів відповідних елементів xi вектора
. Таким чином, наприклад, для вузла 5 сума (2.6) складається з двох додатків:


Побудова першої суми з рівняння (2.5)

алгоритмічно виконується складніше. При фіксованому номері i визначаються номери першого n і останнього m (n<m) гнізд вектора

, у якому зберігаються номери j вузлів, пов'язаних з вузлом i, і для яких j<i. Цим самим задаються компоненти xi вектора
. Тепер необхідно визначити елементи aij=aji (i≠j) матриці A, що зберігаються у векторі
. Ця процедура виконується в такий спосіб. Послідовно з гнізд із n по m у векторі
беруться номери вузлів j (j<i). По цих номерах j з вектора
визначаються номери першого k і останнього l (k<l) гнізд вектора
. Для кожного вузла j у діапазоні гнізд (l–k) вектора
перебуває номер i, оскільки, по-перше, вузол i пов'язаний з кожним вузлом j, а, по-друге, i>j. Переглядаючи гнізда вектора
і порівнюючи номера вузлів, що перебувають у цих гніздах, з номером i, можна визначити номер гнізда, у якому для даного вузла j і його діапазону номерів гнізд (l–k) перебуває номер вузла i. По номеру гнізда вузла i у векторі
можна знайти у векторі
елемент aij=aji (i≠j, j<i).

Розглянемо приклад. Побудуємо суму (2.8) для вузла 5 кінцево-елементної моделі, зображеної на рис. 2.3. Із цим вузлом, як ми вже відзначали вище, зв'язані вузли 4, 2 і 1. Номера цих вузлів зберігаються у векторі

у гніздах з 4 по 6, причому їх номера менше 5. Таким чином, компоненти вектора
відомі: х4, х2 і x1. Визначимо елементи матриці A. Вузлу 4 у векторі
відповідають гнізда з 8 по 12. У цих гніздах зберігаються номери вузлів, пов'язаних з номером 4, причому всі ці номери більше 4. Один із цих номерів – 5. Цей номер перебуває в гнізді вектора
з номером 12. У гнізді з цим же номером 12 у векторі
зберігається елемент a45=a54 (j=4<i=5) матриці А. Аналогічно відшукуються елементи a25 (j=2<i=5) і a15 (j=1<i=5). Таким чином, одержуємо вираз для
: