-
Метод Якобі
Метод Якобі складається з ланцюжка ортогональних перетворень подібності матриці. Кожне перетворення (ротація Якобі) -- це плоский поворот з метою обнулення одного з внедіагональних елементів матриці. Послідовні перетворення не зберігають вже встановлені нульові елементи, але в той же час внедіагональниє елементи стають менше і менше до тих пір, поки матриця не стане діагональною з точністю до машинного нуля. Накопичення в процесі перетворень твору трансформаційних матриць дає матрицю власних векторів, тоді як діагональні елементи є власними значеннями. Метод Якобі завжди є робустним для дійсних симетричних матриць. Для матриць розміру, скажемо більше 10, цей алгоритм повільніший, ніж метод QR (див. нижчий). Проте алгоритм Якобі значно простіший за інші ефективніші методи, таким чином він рекомендується у випадках, коли час виконання не є критичним. Базова матриця ротації Якобі має вигляд:
Ppq = (1 )
( … )
( c…s )
( …1… )
( -s…c )
( … ) (1.22)
( 1)
Всі діагональні елементи матриці ротації Якобі дорівнюють 1, за винятком двох елементів в рядках (і стовпцях) p і q. Всі внедіагональниє елементи дорівнюють нулю, за винятком двох елементів, рівних s і (-s). Числа з і s є косинусом і синусом кута повороту f, так що c2+s2=1. Ротація Якобі перетворить матрицю A згідно з формулою:
A' = PpqTAPpq. (1.23)
Множення PPQTA змінює лише рядки p і q матриці A, тоді як Appq міняє лише стовпці p і q. Відзначимо, що нижні індекси p і q в позначенні Ppq не означають елемент цієї матриці, а швидше індексують типа ротації, тобто плоскість, в якій вона відбувається. Таким чином, змінені елементи в матриці A'' розташовані лише в рядках і стовпцях p і q:
( ... a'1p ... a'1q ... )
(… ... ... ... )
(a'p1 ... a'pp ... a'pq ... a'pn)
A' =( ... ... ... ... )
(a'q1 ... a'qp ... a'qq ... a'qn)
(… ... ... ... )
( ... a'np … a'nq ... ) (1.24)
Для змінених елементів матриці (з врахуванням приведеного вище і її симетрії) виходять явні формули:
a'rp
= carp
- sarq
(r!=p,
r!=q)
a'rq
= carq
+ sarp
(r!=p,
r!=q)
a'pp
= c2app
+ s2aqq
- 2csapq
a'qq
= s2app
+ c2aqq
+ 2csapq
a'pq
= (c2
-
s2)apq
+ cs(app-
aqq)
Ідея методу Якобі в тому, щоб постаратися обнулити внедіагональниє елементи серією ротацій. Для того, щоб обнулилося a''pq, кут ротації, згідно з формулами, приведеними вище, має бути наступним:
q = cot(2f)= (c2 - s2)/(2cs) = (aqq- app)/(2apq). Вважаючи t=s/c, для визначення t прійдем до наступного рівняння: t2 + 2tq - 1 = 0. Менший по модулю корінь цього рівняння відповідає обертанню на кут, менший p/4; вибір цього кута на кожній із стадій дає найбільш стійкий алгоритм.
Використовуючи формулу для вирішення квадратного рівняння з дискримінантом в знаменнику, менший корінь визначається як:
t = sign(q)/(|q|+sqrt(q2+1)). (1.25)
Якщо величина q така, що q2 дасть переповнювання, вважаємо t = 1/(2q). За значенням t визначаються з і s: c = 1/sqrt(t2+1), s = tc. (1.26)
При чисельній модифікації елементів матриці ми прагнемо до зменшення помилки округлення. Ідея полягає в тому, щоб переписати їх як колишнє значення плюс мала добавка, що коректує. В цьому випадку коефіцієнти матриці після перетворення виглядатимуть як:
a'pp = app - tapq a'rp = arp - s(arq + garp) a'rq = arq + s(arp - garq) , (1.27)
де t (тангенс половини кута повороту) визначається, як t = s/(1+c). Збіжність методу Якобі можна оцінити, розглядаючи суму квадратів внедіагональних елементів S; рівняння перетворень дають для цієї суми після трансформації наступне співвідношення: S = Sr!=s(|ars|2); S'' = S - 2|apq|2. Оскільки перетворення ортогональні, сума діагональних елементів при цьому зростає відповідно на |apq|2. Сума ж квадратів внедіагональних елементів монотонно убуває. Оскільки вона обмежена знизу нулем і оскільки ми можемо кожного разу вибирати який хочемо елемент apq для обнулення, сума прагнутиме до нуля. Після ланцюжка перетворень виходить матриця D, діагональна з точністю до машинного нуля. Її діагональні елементи утворюють власні значення первинної матриці A, оскільки виконується D = VTAV, де V = P1p2p3..., а Pi -- матриці ротації Якобі. Стовпці матриці V є власними векторами. Вони обчислюються рекурентно, на кожній стадії по формулах: V'' = Vpi, де спочатку V -- одинична матриця. Для перетворення елементів V використовуються формули:
v'rs = vrs (s!=p, s!=q) v'rp = cvrp - svrq v'rq = svrp + cvrq (1.28)
Для
зменшення помилки округлення наведені
вище формули слід переписати в термінах
g (як вище для елементів матриці A). Єдиним
питанням, що залишається, тепер є
стратегія, по якій потрібно перебирати
знищувані
елементи.
Оригінальний алгоритм Якобі від 1846 року
на кожній стадії шукав у верхньої
трикутної області найбільший по модулю
елемент і обнуляв його. Це вельми
раціональна стратегія для ручного
рахунку, але вона неприйнятна для
комп'ютера, оскільки робить число
операцій на кожній стадії ротації Якобі
порядку N2 замість N.
Для
наших цілей кращою стратегією є циклічний
метод Якобі, де елементи віддаляються
в строгому порядку. Наприклад, можна
просто проходіть по рядках: P12, P13 ... P1n ;
P23,...,p2n ;... Можна показати, що швидкість
збіжності буде в загальному випадку
квадратичною, як для оригінального, так
і для циклічного методу Якобі. Назвемо
одне така безліч послідовних n(n-1) /2
перетворень Якобі проходом. Програма,
поміщена нижче, містить дві тонкість:
• На перших трьох проходах ми проводимо
ротацію відносно індексу (pq) лише тоді,
коли |apq|>e для деякого порогового
значення e = S0/(5n2), де S0 -- сума модулів
внедіагональних елементів верхньої
трикутної матриці.
Після чотирьох проходів у тому випадку, коли |apq|<<|app| і |apq|<<|aqq|, вважаємо |apq|=0 і пропускаємо ротацію. Критерієм порівняння є перевищення діагональних елементів в 10D+2 рази, де D -- число значущих десяткових цифр. У приведеній нижче програмі симетрична матриця а розміром (n x n) на вході завантажена в масив а[1...n][1...n]. На виході наддіагональниє елементи а руйнуються, але діагональні і піддіагональні залишаються на місці з тим, щоб зберегти інформацію про початкову симетричній матриці. Вектор d[1...n] повертає власні значення а. Під час обчислення він містить поточну діагональ. Матриця v[1...n][1...n] повертає набір нормалізованих власних векторів, що відносяться до d[k] для її к-го стовпця. Параметр nrot -- число ротацій Якобі, необхідних для досягнення збіжності. Типові матриці вимагають від 6 до 10 проходів для досягнення збіжності, або від 3n2 до 5n2 ротацій. Кожна ротація вимагає порядку 4n операцій множення і складання, так що загальні витрати мають порядок від 12n3 до 20n3 операцій. При обчисленні власних векторів поряд з власними значеннями, число операцій на ротації зростає з 4n до 6n, що означає перевищення лише на 50 відсотків.
1.2
Програмна реалізація алгоритму (послідовна програма).
|
Ім’я змінної |
Тип |
Призначення |
|
а |
float |
Масив який заповнюється числами |
|
b |
float |
Вектор вільних елементів |
|
е |
float |
Точність обчислення |
|
х |
float |
Результат |
|
N |
Integer |
Змінна, яка визначає розмір системи |
|
I,J |
Integer |
Лічильник |
Таблиця 1- Типи змінних
Блок-схема



Рисунок 1.1- Блок- схема алгоритму послідовної програми

Рисунок
1.2- Режим тестування
