Предмет:
Тип роботи:
Курсова робота
К-сть сторінок:
26
Мова:
Українська
justify;">Розгортання вікового визначника.
Як відомо, віковим визначником матриці А = [aij] називається визначник вигляду
D () = det (A – E) = (1)
Прирівнюючи цей визначник до нуля, одержуємо характеристичне рівняння
D () = 0
Якщо потрібно знайти все коріння характеристичного рівняння, то доцільно заздалегідь обчислити визначник (1).
Розгортаючи визначник (1), одержуємо поліном n-го степеня
(2)
Де
є сума усіх діагональних мінорів першого порядку матриці А.
є сума всього діагонального мінору другого порядку матриці А;
- сума всіх діагональних мінорів третього порядку матриці А і т. д. Нарешті
n = det A.
Легко переконатися, що число діагональних мінорів k-го порядку матриці А дорівнює
(k = 1, 2, …, n).
Звідси одержуємо, що безпосереднє обчислення коефіцієнтів характеристичного полінома (2) еквівалентно обчисленню визначників різних порядків. Остання задача, взагалі кажучи, технічно важко здійснена для скільки-небудь великих значень n. Тому створені спеціальні методи розгортання вікових визначників (методи обертання Якобі, А. М. Данілевського, Леверье, метод невизначених коефіцієнтів, метод інтерполяції та ін.).
2.2. Знаходження власних векторів і власних значень матриць. Метод обертання Якобі
Метод обертань Якобі застосовується тільки для симетричних матриць ( = ) і вирішує повну проблему власних значень і власних векторів таких матриць. Він заснований на знаходженні за допомогою ітераційних процедур матриці U в перетворенні подібності
Λ = , а оскільки для симетричних матриць А матриця перетворення подібності є ортогональною ( = ), то Λ = , де Λ – діагональна матриця з власними значеннями на головній діагоналі
Нехай дана симетрична матриця А. Потрібно для неї обчислити з точністю ε всі власні значення і відповідні їм власні вектори. Алгоритм методу обертання наступний:
Нехай відома матриця на k-й ітерації, при цьому для k = 0 = А.
Вибирається максимальний по модулю недіагональні елемент матриці .
Ставиться завдання знайти таку ортогональную матрицю , щоб в результаті перетворення подібності = відбулося обнулення елемента матриці . В якості ортогональної матриці вибирається матриця обертання, що має наступний вигляд:
У матриці обертання на перетині i – го рядка і j – го стовпця знаходиться елемент де - кут обертання, що підлягає визначенню. Симетрично щодо головної діагоналі (j -й рядок, i -й стовпець) розташований елемент . Діагональні елементи дорівнюють відповідно ; інші діагональні елементи інші елементи у матриці обертання U (к) дорівнюють нулю.
Кут обертання визначається з умови :
,
причому якщо
Будується матриця , = ,
в якій елемент .
В якості критерію закінчення ітераційного процесу використовується умова малості суми квадратів поза діагональних елементів:
Якщо то ітераційний процес:
=
триває. Якщо , то ітераційний процес зупиняється, і в
якості шуканих власних значень приймаються
. Координатними стовпчиками власних векторів матриці А в одиничному базисі будуть стовпці матриці
, тобто
причому ці власні вектори будуть ортогональні між собою, тобто
.
2.3. Засоби формування інтерфейсу користувача
В додатку Б показаний код консольної програми для взаємодії з користувачем. Користувач вводить розмірність матриці (N). Після чого вводятся значення матриці. Коли значення введені перевіряється функцією (isSimmetrial) чи матриця симетрична. Якщо вона не симетрична програма почне роботу спочатку і запропонує ввести дані знову. Якщо ж матриця симетрична програма за допомогою функції (wrachenie) знайде власні вектори та власні значення та видасть їх на екран.
3. Текст програми алгоритму методу обертання Якобі
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Threading. Tasks;
namespace yacobi_sharp
{
class Program
{
static void Main (string[] args)
{
int i, j;
int size;
double precision;
Console. Write («Метод обертання Якобi. «) ;
error1:
Console. Write («\nВведiть розмiрнiсть матрицi (NxN) N = «) ;
size = int. Parse (Console. ReadLine ()) ;
double[, ] coefficients = new double[size, size];
double[, ] solution = new double[size, size];
Console. Write («\nВведiть елементи матрицi: \n») ;
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
solution[i, j] = 0;
}
solution[i, i] = 1;
}
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
Console. Write («A[{0}][{1}]: «, i + 1, j + 1) ;
coefficients[i, j] = double. Parse (Console. ReadLine ()) ; ;
}
}
Console. Write («Сформована матриця: \n») ;
for (i = 0; i < size; i++)
{
for (j = 0;