function mg1d()

% Megoldandó feladat jobb oldala (-u"=f)
fexact=@(x)pi^2*sin(pi*x); 

% Ciklusszám
ciklusszam=12; % Hányszor fusson le egy teljes ciklus (V vagy W); 

% Legfinomabb rács megadása
p = 5; % szintek száma
n = 2^p-1; % belsõ pontok száma 
h = 1/(n+1);
felosztas=h:h:1-h;

% Egyenletrendszer jobb oldala
phi=(fexact(felosztas))'; 

% Az egyenletrendszer pontos megoldása
uerpontos=gallery('tridiag',n,-1,2,-1)\phi*h^2;

% Iteráció kezdõvektora
u=zeros(n,1); 
plot([0,felosztas,1],[0,u',0],'bo-',[0,felosztas,1],[0,uerpontos',0],'-r')
pause

for j=1:ciklusszam
u=multigrid(p,u,phi);
plot([0,felosztas,1],[0,u',0],'bo-',[0,felosztas,1],[0,uerpontos',0],'-r')
pause
end

function u=multigrid(p,u,jobboldal)



function u=jacobirelax(A,b,klepes,u,omega)
% klepes Jacobi-relaxációt csinál az u vektorról indulva.
% A az egyenletrendszer mátrixa, b pedig a jobb oldala.

for i = 1:klepes
    u = u - omega*(A*u-b)./diag(A);
end

function [udurva]=restrikcio(ufinom)
% Súlyozott restrikció.
udurva=(2*ufinom(2:2:end-1)+1*ufinom(1:2:end-2)+ufinom(3:2:end))/4;

function [ufinom]=prolongacio(udurva)
% Prolongáció
l=length(udurva);
ufinom=interp1(0:l+1,[0,udurva',0],[1/2:1/2:l+1/2]');