GNU Octave/Metoda kolejnych nadrelaksacji
Metoda kolejnych nadrelaksacji
[edytuj]Metoda kolejnych nadrelaksacji to iteracyjna metoda rozwiązywania przybliżonego równania Laplace'a na stacjonarny rozkład temperatury w ograniczonym obszarze.
Daną mamy kratę rozmiaru , przykładamy znaną, stałą temperaturę na brzegach tej kraty. Jak będzie wyglądał rozkład temperatury wewnątrz kraty po długim czasie? Oznaczmy punkt kratowy w wierszu i-tym i kolumnie j-tej przez . W metodzie kolejnych nadrelaksacji obliczamy iteracyjnie dla wewnętrznych punktów kraty:
gdzie jest pewnym współczynnikiem zależnym od obszaru. Dobre dobranie ma wpływ na szybkość zbieżności algorytmu.
Uwaga. Metoda zaprezentowana poniżej na pewno nie jest najszybszą, ale jest nietrudna w implementacji.
Utożsamimy kratę z wektorem długości utworzonym "wiersz po wierszu". Jedna iteracja algorytmu będzie polegała na mnożeniu przez pewną macierz. Każdemu punktowi kraty odpowiada jeden wiersz tej macierzy:
- W wierszu odpowiadającym punktom punktom brzegowym kraty: 1 na przekątnej, pozostałe: 0
- W wierszach odpowiadających punktom wewnętrzmym: na przekątnej oraz w czterech innych
kolumnach. Na przykład dla ma postać:
Funkcja tworząca tę macierz dla :
function [Y]=laplasjan2d_sparse(N) omega=1/(1+sin(pi/N)) M=(N^2-4*N+3)*4; x=zeros(1,M); y=zeros(1,M); v=zeros(1,M); k=1; for (i=1:N) for (j=1:N) w=N*(i-1)+j; if ((i==1) || (i==N) || (j==1) || (j==N)) x(k)=w; y(k)=w; v(k)=1; k++; else x(k)=w; y(k)=w; v(k)=1-omega; k++; x(k)=w; y(k)=w-1; v(k)=omega/4; k++; x(k)=w; y(k)=w+1; v(k)=omega/4; k++; x(k)=w; y(k)=w-N; v(k)=omega/4; k++; x(k)=w; y(k)=w+N; v(k)=omega/4; k++; endif; endfor; endfor; Y=sparse(x,y,v,N*N,N*N,0); endfunction;
Przygotowujemy obliczenia:
#liczba punktów kratowych N=150; #tolerancja epsilon=0.01; #kolejna relaksacja Y=laplasjan2d_sparse(N); #początkowy stan kraty f f = ... f=reshape(f,1,N*N); f=f';
Wykonujemy algorytm kolejnych relaksacji:
do g=Y*f; err=norm(f-g,2); f=g; until (err<epsilon); f=reshape(f',N,N);
Przykładowy wynik umieszczony jest na ilustracji obok.