Смекни!
smekni.com

Итерационный метод решения проблемы собственных значений (стр. 1 из 2)

Курсовая работа

«Численные методы в экономике»

Тема: «Итерационный метод решения проблемы собственных значений»

Новосибирск, 2010

Введение

В данной курсовой работе рассмотрен итерационный метод решения проблемы собственных значений. Сходимость итерационного процесса может быть очень медленной. Причиной этого является наличие нелинейного элементарного делителя, соответствующего первому собственному числу. Другая причина – это близость второго собственного числа к первому. В этом случае можно ускорить сходимость несколькими методами. Одним из них является метод скалярных произведений, который рассмотрен в данной работе.

В методе скалярных произведений число итераций, необходимых для определения максимального собственного числа матрицы, с данной точностью, сокращается почти вдвое.

математический итерационный метод программный


1. Математическая постановка задачи

Этот метод особенно удобен в применении к симметричной матрице, однако попробуем изложить его без этого предположения. В основе метода лежат последовательности итераций вектора Y0 матрицами A и A’, транспонированной с А. Эти последовательности имеют следующий вид:

Y0, Y1=A*Y0, Y2=A2*Y0, …, Yk=Ak*Y0, … (1)

Y0, Y’1=A’*Y0, Y’2=A’2*Y0, …, Y’k=A’k*Y0, … (2)

Пусть b1, …, bnкоординатывектора Y0вбазисе X’1, …, X’n, a1, …, anкоординаты Y0вбазисе X1, …, Xn. При этом предположим, что базисы выбраны так, что система векторов X1, X2, …, Xn и X’1, …, X’n удовлетворяет условиям ортогональности и нормированности.

Образуем скалярное произведение (Y’k, Yk):

(Y’k, Yk)=(A’k*Y0, Ak*Y0)=(Y0, A2k*Y0)=(b1*X’1+ … +bn*X’n, a1*l2k1*X1+ … + + an*l2kn*Xn)

Далее в силу свойств ортогональности и нормированности системы векторов имеем:

(Y’k, Yk)=a1*b1*l2k1+ … + an*bn*l2kn (3).

Аналогично:

(Y’k-1, Yk)=a1*b1*l2k-11+ … + an*bn*l2k-1n (4).

Можно видеть, что из равенств (3) и (4) получаем:


(Y’k, Yk)/(Y’k-1, Yk) = l1 + O(l2/l1)2k.

Из этой оценки видно, что образование скалярного произведения сокращает число шагов итераций, нужных для определения максимального собственного l1, с данной точностью, почти вдвое. Однако при этом требуется дополнительное вычисление последовательности (2).

Следует отметить, что в случае симметричной матрицы, последовательности (1) и (2) совпадают, и поэтому в этом случае применение метода скалярного произведения особенно целесообразно. Начиная с некоторого шага итерации, нужно вычислять соответствующие скалярные произведения и определять l1 через их отношения.

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; %присваивание начального значения решения

iftrace

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);%вычисление собственного вектора

iftrace

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.2551.340-1.316 0;

1.3402.526 00.516;

-1.316 0-1.7434.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


График значений собственного числа заданной матрицы за время итерационного процесса

График значений собственного вектора, соответствующего собственному числу


Изменение максимальной допустимой ошибки

Увеличим значение допустимой ошибки

Исходные данные:

yn=[1,1,1,1];

ed=0.0001;

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.1491 m = 29 L1 = -5.5253 t = 0

0.0136

0.7880

-0.5972

График значений собственного числа заданной матрицы за время итерационного процесса/

График значений собственного вектора, соответствующего собственному числу

Уменьшим значение допустимой ошибки

Исходные данные:

yn=[1,1,1,1];

ed=0.000001;

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.1498 m = 39 L1 = -5.5251 t = 0

0.0135

0.7862

-0.5994

График значений собственного числа заданной матрицы за время итерационного процесса

График значений собственного вектора, соответствующего собственному числу


Изменение начального приближения собственного вектора

Увеличимзначение начального приближения, т.е. отдалим от конечного решения.

Исходные данные:

yn=[2,3,3,2];

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 = 32 L1 = -5.5251 t = 1

-0.0135

-0.7853

0.6004

График значений собственного числа заданной матрицы за время итерационного процесса/


График значений собственного вектора, соответствующего собственному числу

Уменьшимзначение начального приближения, т.е. приблизимот конечного решения.

Исходные данные:

yn=[1,0,1,0];

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.1496 m = 25 L1 = -5.5251 t = 0

0.0135

0.7866

-0.5989

График значений собственного числа заданной матрицы за время итерационного процесса/

График значений собственного вектора, соответствующего собственному числу


Рассмотрим другие примеры:

Исходные данные:

yn=[1,1,1];

L1= 0.01

edop=0.00001;

a=[1 1 1;

2 3 4;

0 4 0];

Найдем собственные значения исходной матрицы, используя функцию eig. Получим

L1= 6.2085

0.4794

-2.6879

Полученный результат:

y = 0.2565 m =13 L1 =6.2085 t =0

0.8125

0.5235


График значений собственного числа заданной матрицы за время итерационного процесса

График значений собственного вектора, соответствующего собственному числу