% Metoda potęgowa dla zadania własnego _____________________________

% Wyznacza największą wartość własną macierzy kwadratowej.
%
% Argumenty:
%     A: macierz kwadratowa.
%     x: wektor początkowy.
%     tol: dokłandość obliczeń.
% ____________________________________________________________


% Wczytanie argumentów _________________________________________
clc; clear
%A = [[1, 2, 0]; [2, 1, 1]; [0, 1, 0];];
%A = [6 5 -5; 2 6 -2; 2 5 -1];
%A = [3 0 0; -4 6 2; 16 -15 -5];
%A = [4 1 0; 1 4 1; 0 1 4];
%A = [5 4 3; -1 0 -3; 1 -2 1]; % dwukrotna wartość własna 4.
%A = [2 1 0; 1 2 1; 0 1 2];
%A = [1 2 1; 0 1 3; 2 1 1]; % dwie zespolone wartości własne.
%x = [1; -1; 2];

%A = [10 -2 3 2 0; -2 10 -3 4 5; 3 -3 6 3 3; 2 4 3 6 6; 0 5 3 6 13];
%x = [1;2;3;4;5];

A = [2 -12; 1 -5];
x = [1; 1];

tol = 10^(-3);

iter = 0;
lambda = 0;

while tol < norm(A*x-lambda*x)
    y = A*x;
    iter = iter +1;
    %lambda = dot(x,y)/dot(x,x);
    lambda = y(2)/x(2);
    x = y;
    x = x/norm(x);
    disp(iter);
    disp(lambda);
    disp(y);
    disp(x);
end

disp('Norma macierzy:');
disp(norm(A*x-lambda*x));
disp('Liczba iteracji:');
disp(iter);
disp('Najwieksza wartość własna:');
disp(lambda);
disp('Odpowiadający jej wektor własny:');
disp(x);