Курсова робота
В«Чисельні методи в економіці В»
Тема: В«Ітераційний метод вирішення проблеми власних значень В»
Новосибірськ, 2010
Введення
У даній курсовій роботі розглянуто ітераційний метод розв'язання проблеми власних значень. Збіжність ітераційного процесу може бути дуже повільною. Причиною цього є наявність нелінійного елементарного дільника, відповідає першому власному числу. Інша причина - це близькість другий власного числа до першого. У цьому випадку можна прискорити збіжність декількома методами. Одним з них є метод скалярних добутків, який розглянуто в даній роботі.
У методі скалярних добутків число ітерацій, необхідних для визначення максимального власного числа матриці, з даної точністю, скорочується майже вдвічі.
математичний ітераційний метод програмний
1. Математична постановка задачі
Цей метод особливо зручний в застосуванні до симетричної матриці, проте спробуємо викласти його без цього припущення. В основі методу лежать послідовності ітерацій вектора Y 0 матрицями A і A ', транспонованої з А. Ці послідовності мають наступний вигляд:
Y 0 , Y 1 = A * Y 0 , Y 2 = A 2 * Y 0 , ..., Y k = A k * Y 0 , ... (1)
Y 0 , Y ' 1 = A' * Y 0 , Y ' 2 = A' 2 * Y 0 , ..., Y ' k = A' k * Y 0 , ... (2)
Нехай b 1 , ..., B n координати вектора Y 0 в базисі X ' 1 , ..., X ' n , a 1 , ..., a n координати Y 0 в базисі X 1 , ..., X n . При цьому припустимо, що базиси вибрані так, що система векторів X 1 , X 2 , ..., X n і X ' 1 , ..., X' n задовольняє умовам ортогональності і нормування.
Утворюємо скалярний добуток (Y ' k , Y k ):
(Y ' k , Y k ) = (A ' k * Y 0 , A k * Y 0 ) = (Y 0 , A 2k * Y 0 ) = (b 1 * X ' 1 + ... + b n * X ' n , a 1 * l 2k 1 * X 1 + ... + + A n * l 2k n * X n )
Далі в силу властивостей ортогональності та нормування системи векторів маємо:
(Y ' k , Y k ) = a 1 * b 1 * l 2k 1 + ... + a n * b n * l 2k n (3).
Аналогічно:
(Y ' k-1 , Y k ) = a 1 * b 1 * l 2k-1 1 + ... + a n * b n * l 2k-1 n (4).
Можна бачити, що з рівностей (3) і (4) отримуємо:
(Y ' k , Y k )/(Y' k -1 , Y k ) = l 1 + O (l 2 /l 1 ) 2 k .
З цієї оцінки видно, що освіта скалярного твори скорочує число кроків ітерацій, потрібних для визначення максимального власного l 1 , з даної точністю, майже вдвічі. Однак при цьому потрібно додаткове обчислення послідовності (2).
Слід відзначити, що в разі симетричної матриці, послідовності (1) і (2) збігаються, і тому в цьому випадку застосування методу скалярного добутку особливо доцільно. Починаючи з деякого кроку ітерації, потрібно обчислювати відповідні скалярні твори і визначати l 1 через їх відносини.
2. Опис програмного забезпечення Програма, реалізує розглянутий метод, розроблена в середовищі МаtLab, призначеної для виконання математичних операцій. Вона складається з головної програми і 2х підпрограм, що викликаються з основної програми.
Головний програма (main.m)
В основній програмі задається початкове наближення yn, початкове значення власного вектора L1 і значення допустимої помилки ed.
Текст програми:
clc% очистка екрану
yn = [1; 1; 1; 1]; % Завдання початкового наближення власного вектора
L1 = -5.5251;% початкове значення власного числа матриці
ed = 0.00001;% значення допустимої помилки
trace = 1;% установка режиму виведення на екран
[mout, Lout, yout] = sobstv ('fun', yn, L1, ed, trace);% виклик функції, що реалізує метод скалярних добутків
plot (mout, Lout) % Висновок графіка значень власного числа заданої матриці за час ітераційного процесу
pause;
plot (mout, yout)% висновок графіка значень власного вектора, відповідного власному числу
Підпрограма sobstv.m
У даній підпрограмі відбувається обчислення максимального власного числа і відповідного йому власного вектора. Значення власного числа на кожному кроці заноситься в L, результат множення матриці а на заданий вектор заноситься в yn. Час виконання ітерацій одно t, кількість ітерацій - m .
Текст програми:
function [Mout, Lout, yout] = sobstv (fun, yn, L1, ed, trace);
a = feval (fun);% виклик матриці, описаної у файлі з ім'ям matrsp
m = 0;% обнулення лічильника ітерацій
Lout = L1; mout = m; yout = yn ';
L = 0;% присвоювання початкового значення рішення
if trace
clc, yn, m, L1% виведення значення рішень на даному етапі
end
t0 = fix (clock);% завдання початкової точки відліку часу виконання ітерацій
while (Abs (L1-L)> ed)% завдання циклу
yn1 = yn;
yn = a * yn;
L = L1;
L1 = (yn '* yn)/(yn1' * yn);% обчислення власного числа
y = yn/sqrt (yn '* yn);% обчислення власного вектора
if trace
home, y, m, L1% висновок поточних значень на екран
end% на даному етапі ітерацій
m = m +1;% збільшення лічильника ітерацій
Lout = [Lout; L1];% формування вихідних параметрів
mout = [mout; m];
yout = [yout; y '];
end
t1 = fix (clock);% значення кінцевого моменту часу
t = t1-t0% час виконання ітерацій
pause;
Підпрограма fun.m
У цій підпрограмі задається матриця a .
Текст програми:
function a = fun
% Змінювана користувачем частина
a = [1.255 1.340 -1.316 0;
1.340 2.526 0 0.516;
-1.316 0 -1.743 4.628;
0 0.516 4.628 0.552];
3. Опис тестових завдань У даній роботі спроектована програма, що реалізує метод скалярного твори для знаходження максимального власного числа матриці. Для перевірки пропонується знаходження власних чисел (векторів) симетричної матриці. При цьому досліджується вплив вектора початкового наближення до вирішення і значення допустимої помилки на час обчислень і число ітерацій.
Знайдемо власні значення вихідної матриці, використовуючи функцію eig.
Отримаємо
L1 = -5.5251
0.2841
3.4399
4.3911
Рішення вихідної задачі
Вихідні дані:
yn = [1,1,1,1];
ed = 0.00001;
a = [1.255 1.340 -1.316 0;
1.340 2.526 0 0.516;
-1.316 0 -1.743 4.628;
0 0.516 4.628 0.552];
Дані, отримані при виконанні програми :
y = -0.1501 m = 34 L1 = -5.5251 T = 0
-0.0135
-0.7853
0.6005
Графік зн...