

#zadanie wlasne
A=[2 1;1 2];
eig(A)
[Q,D]=eig(A)
A*Q-Q*D
norm(A*Q-Q*D,1)

#wiel charakerystyczny
poly(A)
roots(poly(A))

[r,v]=powerr(A,1)
A*v-v*r
#zwiekszmy szybkosc...
[r,v]=powerr(A-0.5*eye(2),1)
r+0.9 #to wartosc wlasna

#jeszcze bardziej....
[r,v]=powerr(A-0.99*eye(2),1)
r+0.99 #to wartosc wlasna
#ale to wiele nie zmienilo 

#odwrotna potegowa

[r,v]=powerr(-A,1)
A*v-v*r
#odwrotna potegowa tzn potegowa dla A^{-1}
[r,v]=powerr(inv(A),1)

#z parametrem
[r,x]=invpow(A, sh=0.8,verb=1)

#z lepsza aproksymacja ww 1
[r,x]=invpow(A, sh=0.99,verb=1)

#z lepsza aproksymacja ww 1
[r,x]=invpow(A, sh=1+1e-5,verb=1)

#to samo dla ww 3

#z parametrem
[r,x]=invpow(A, sh=2.8,verb=1)

#z lepsza aproksymacja ww 1
[r,x]=invpow(A, sh=3.01,verb=1)

#z lepsza aproksymacja ww 1
[r,x]=invpow(A, sh=3+1e-5,verb=1)

#wezmy bardzo zla macierz z ww 1 i -1
A=[0 1;1 0];
eig(A)
[r,v]=powerr(inv(A),1)
A*v-v*r
#kompletnie zle....


#moze w wiekszej ilosci wymiarow 
#stworzmy A z okreslonymi wektorami wlasnymi
#losowa ortogonalna
[Q,R]=qr(randn(4,4));
D=diag([7,2,-1,0.1]);
A=Q*D*Q';
[Q1,D1]=eig(A)
[r,x]=powerr(A,1)
A*x-x*r
r-7
#prosze zauwazyc ze przyblizenie wart wl jest o rzad wielkosci lepsze niz
#przyblizenie wekt wlasnego
k=2;
a=D1(k,k); q=Q1(:,k);#wart wl
[r,x]=invpow(A, sh=a+1e-5,verb=1)
norm(A*x-x*r,1)
r-a
norm(x-q)
norm(x+q) #nie wiemy czy x zbiegnie do q czy do -q
#to samo dla k=4 z gorszym parametrem
k=4;
a=D1(k,k); q=Q1(:,k);#wart wl
[r,x]=invpow(A, sh=a-1e-2,verb=1)
norm(A*x-x*r,1)
r-a
norm(x-q)
norm(x+q) #nie wiemy czy x zbiegnie do q czy do -q


 
#metoda QR
#A_k=Q_k*R_k
#A_{k+1}=R_kQ_k
#Q_k -> m ortogonalnej z wkolumnami ktore sa wektorami wlasnymi
#R_k -> diagonalnej z wartosciami wlasnymi o ile ww 
#maja rozne modyly...
A=[2 1;1 2];
eig(A)
B=A;Z=eye(size(A));
for k=1:10,
 [Q,R]=qr(B);
 Z=Z*Q;
 B=R*Q;
endfor
norm(A*Z-Z*B,1)
#z innym war stopu
it=0; B=A;Z=eye(size(A));
while((norm(B-diag(diag(B)),1)>1e-12)&&(it<100))
 [Q,R]=qr(B);
 Z=Z*Q;
 B=R*Q;
 it++;
endwhile
norm(A*Z-Z*B,1)



