%diary sajatertek_demo.diary

clear -all
clc

%%% Sajátértékszámítás az Octave beépített "gyári" eszközeivel
%%% Ezek többnyire a LAPACK megfelelõ függvényeit hívják
disp('1.példa.');
disp('A vizsgálandó A mátrix:');
A1 = [ 3  2 -1;
      7  8 -1;
     -4 -4  3
    ]
%% 1a. módszer
disp('Az összes sajátérték kiszámíttatása az eig függvénnyel:');
%% lásd
% help eig
Lambda = eig(A1)
    
input('Folytatás ENTER-rel');   
%% 1b. módszer
clc
disp('Az összes sajátérték és sajátvektor kiszámíttatása az eig függvénnyel:');
[V, Lambda] = eig(A1)

disp('A sajátvektorok és a sajátértékek ellenõrzése:');
for k = 1:length(A1)
  hibainf(k) = norm(A1*V(:,k) - Lambda(k,k)*V(:,k), inf);
endfor
hibainf

input('Folytatás ENTER-rel');
%% 1c. módszer
clc
disp('Adott számú (a 2 legnagyobb) sajátérték és sajátvektor kiszámíttatása az eigs függvénnyel:');
%% lásd
% help eigs
[V, D] = eigs(A1,2)

disp('A sajátvektorok és a sajátértékek ellenõrzése:');
for k = 1:2
  hibainf2(k) = norm( A1*V(:,k) - D(k,k)*V(:,k), inf);
endfor
hibainf2

input('Folytatás ENTER-rel');
%% 2. módszer
%% fölíratjuk az A mátrix karakterisztikus polinomját, és
%% kiszámíttatjuk a polinom gyökeit, lásd
% help poly
% help roots
clc
disp('A sajátértékek az A karakterisztikus polinomjának gyökei:');
pA1 = poly(A1)
sajatertekekA1 = roots(pA1)

input('Folytatás ENTER-rel');
clc
disp('2.példa.');
disp('A vizsgálandó A mátrix:');
A2 = [10, 1,  2,  1;
      1, 5,  1,  0;
      1, 2, -5,  1;
      1, 1,  1, 10]
disp('A sajátértékei az eig függvénnyel:');
Lambdak = eig(A2)
%%
disp('A sajátvektorai és sajátértékei az eig függvénnyel:');
[X,Lambdak] = eig(A2)

disp('A sajátvektorai és sajátértékei az eigs függvénnyel:');
[V, D] = eigs(A2)
%%

input('Folytatás ENTER-rel');
%%% Nagy mátrixokra a futásidõk vizsgálata
disp('Idõmérés az eig függvénnyel különbözõ dimenziós A mátrixokra:');
for n = 100:100:10^3      % nagyobbhoz sok türelem kell :-)
A3 = rand(n);
n
tic()
[V, Lambdak] = eig(A3);
futasido = toc()
endfor
%%

disp('Idõmérés az eigs függvénnyel, fix A mátrixszal, egyre több sajátértéket kérve:');
n = 10^3                  % nagyobbhoz sok türelem kell :-)
A4 = rand(n);
for k = floor(n/10):floor(n/10):n
k
tic()
[V, Lambdak] = eigs(A4, k);
futasido = toc()
%% Vajon mi okozhatja a futásidõk eltéréseit?
endfor

disp('Végezzen más, hasonlóan választott vagy generált mátrixokkal is ilyen számításokat!');

diary off