П.1. Реализация итерационного метода вращений для расчета собственных значений симметричной матрицы

 

% Проблема собственных значений

% Метод Вращений

N=22; % Задание Размерности матрицы

A=rand(N); %Формирование матрицы случайных значений

A=A*A'; %Формирование симметричной матрицы

Err=1; %Инициация начального значения погрешности

kk=0; %Инициация счетчика итераций

while Err>1.e-9 % Начало цикла итерационного процесса (пока Err>1/e9)

kk=kk+1; % Прирощение счетчика итераций

for k=2:N % Вниз по столбцам

%Выбор максимального по модулю элемента к-ой строки слева

%от главной диагонали для исключения поддиагональных элементов

[mm,m]=find((abs(A(k,1:k-1))-max(abs(A(k,1:k-1))))==0);

w=2*A(k,m)/(A(k,k)-A(m,m)); %Тангенс дв-го угла вращения

ss=sqrt(1+w^2);

s=sign(w)*sqrt((ss-1)/(2*ss));%Синус угла вращения

c=sqrt((ss+1)/(2*ss)); %Косинус угла вращения

T=eye(N); %%%%%%%%%%%%%%%%%%%%%%

T(m,m)=c; %Формирование матрицы

T(k,k)=c; %вращения

T(k,m)=-s; %T_km

T(m,k)=s; %%%%%%%%%%%%%%%%%%%%%%

A=T'*A*T; % Преобразование Гивенса (плоских вращений)

end

AA=A-diag(diag(A)); % Выделение НЕдиагональных элементов матрицы

Err=sum(sum(AA.^2)); % Выч. суммы квадратов недиагональных элементов

end % Конец цикла итерационного процесса

 

 

S=sparse(A); %Формат разреженной матрицы

spy(abs(S)>1e-5) %Визуализация структуры разреженной матрицы (|a_ij|>1.e-5)

{'Iterations' kk} % Вывод числа итераций

'eigenvalues'

Labdf=sort(diag(A),'descend') % Спектр матрицы в порядке убывания