%% Kilencedik gyakorlat
%% Iterációs megoldási módszerek
%
% Meg akarjuk oldani az
% Ax = b
% egyenletet.
% Alapgondolat: Legyen A=M-N ahol M invertálható, ekkor az előző egyenlet átalakítva:
% (M-N)x = b\\
% Mx - Nx = b\\
% Mx = Nx + b\\
% x = M^{-1}N x + M^{-1} b
% Tehát keressük az f(x)=M^{-1} N x + M^{-1} b függvény egy fixpontját (azaz ahol f(x)=x), ezt az alábbi iteráció segítségével tehetjük meg:
% x_{k+1}= M^{-1}N x_k + M^{-1}b
% Ha használjuk a B = M^{-1}N és f = M^{-1} b jelöléseket, akkor az előző az alábbi iterációs képlettel írható le:
% x_{k+1} = B x_k + f,
% azaz minden lépésben megszorozzuk a megoldásokat tartalmazó x_k vektort egy B mátrixszal, majd hozzáadjuk az f vektort.
% Tétel: Az iteráció konvergál, ha\rho(B)<1, ahol \rho(B) a mátrix spektrálsugara (azaz |\lambda_i|<1 a B mátrix minden \lambda_i sajátértékére).
% Módszerek:
% Legyen L: főátló alatti elemek, D a főátló elemeinek, illetve R a főátló feletti elemek mátrixsza. Ekkor négy módszert különböztetünk meg:
% Jacobi iteráció: M = D, \quad N=-L-R.
% Gauss-Seidel iteráció: M = D + L, \quad N=-R.
% Relaxált Jacobi (JOR): M = \frac1\omega D, \quad N=\frac{1-\omega}{\omega}D - L - R.
% Relaxált Gauss-Seidel (SOR): M = \frac1\omega D + L, \quad N=\frac{1-\omega}{\omega}D - R.
% Tétel: Ha A szigorúan diagonálisan domináns (azaz a főátlóban lévők absz. értékei nagyobbak az adott sorban lévő abszolútérték-összegénél), akkor a Jacobi és a Gauss-Seidel iteráció konvergens.
% Definíció: Egy négyzetes mátrixot M-mátrixnak nevezünk, ha főátlóján kívül nempozitív elemei vannak, és létezik egy olyan g>0 vektor, amivel Ag >0.
% Tétel: Ha A M-mátrix, akkor konvergens a JOR és az SOR \omega \in (0,1) esetén.
% Tétel: Ha A szimmetrikus és pozitív definit, akkor konvergens az SOR iteráció \omega \in (0,2) esetén.
%
% 1. feladat: Tekintsük az alábbi egyenletrendszert:
% \left[\matrix{2 & -1 \cr -1 & 2}\right] \overline{x} = \left[ \matrix{1 \cr 3} \right].
% Melyik fenti módszerrel oldható meg?
%
% 2. feladat: (a) Alkalmazzuk a fenti egyenletrendszerre a JOR iterációt! Írjuk fel az iteráció lépéseit, majd programozzuk is le x_0 = ( \matrix{0 &  0})^T  kezdeti vektorral!
% Megoldás:

...

%
% (b) Teszteljük, hogy mely értékek esetén milyen gyors lesz a konvergencia! Ezt úgy tegyük meg, hogy tekintsük pontosnak a megoldásunkat, ha
% \left\Vert x_k - \left( \matrix{5/3 \cr 7/3} \right)\right\Vert_{\infty}<10^{-6}.
% Mivel lehet magyarázni ezen jelenséget?
% Megoldás: Írjunk kódot, ami adott \omega értékre visszaadja a lépések számát!

omega=linspace(0.1,1,10);
k=zeros(10,1);

for i=1:10
    k(i)=lepesszam(omega(i));
end

plot(omega,k)

%
% 3. feladat: Oldjuk meg az 1. feladat egyenletét Gauss-Seidel iteráció segítségével is! Írjunk programot, amely elvégzi az iterációt!
% Megoldás:

...

%

function [k]=lepesszam(omega)
...

end