function [maximumnorma]=ellvdm1(n)
%% A Laplace u=x^2+y^2 egyenlet megoldása
%
% A feladatot az egységnégyzeten oldjuk meg az alábbi peremfeltétellel
%
% u(x,0)=0
% u(x,1)=x^2/2
% u(0,y)=sin(pi y)
% u(1,y)=e^(pi)sin(pi y)+y^2/2
%
% A feladat pontos megoldása: u(x,y)=e^(pi x)sin(pi y)+0.5x^2y^2.

%% A feladat bemenõ paraméterei
%
% n+1 - Az egy irányú intervallumok száma
%
% Megj.: Azaz (n)^2 beslõ pontom lesz.

%% A feladat kimenõ paraméterei
%
% A nemrikus megoldásvektor
% A maximumnormában mért hiba
% Ábra

%% A diszkretizációs mátrix felépítése
%
% Nagysága n^2, mert a perempontokat a jobboldalban tároljuk majd el.

h=1/(n+1);

% Fõátló
a1=-4*ones(n^2,1);
% Fõátlóhoz legközelebbi felsõ átló
a21=sparse(1,1);
a22=ones(n^2-1,1);
for i=1:n-1;
    a22(i*(n),1)=0;
end    
a2=[a21;a22];
% Fõátlóhoz távolabbi felsõ átló
a3=ones(n^2,1);
% Fõátlóhoz legközelebbi alsó átló
a42=ones(n^2-1,1);
for i=1:n-1;
    a42(i*(n),1)=0;
end    
a41=sparse(1,1);
a4=[a42;a41];
% Fõátlóhoz távolabbi alsó átló
a5=ones(n^2,1);

% A mátrix összerakása
V=[a1,a2,a3,a4,a5]; 
d=[0,1,n,-1,-n];
A=spdiags(V,d,n^2,n^2);
A_h=A'*(1/h^2);

%% A jobboldali vektor felépítése

% Perem elkészítése 
% Az u(x,1) perem
    for i=1:n
        g21(i)=(i/(n+1))^2/2;
    end
  g2=[zeros(1,n^2-n) g21]';
% Az u(0,y) perem
    for i=1:n;
        g31(1,1+(i-1)*n)=sin(pi*i/(n+1));
    end
  g3=[g31 zeros(1,n-1)]';
% Az u(1,y) perem
    for i=1:n;
        g1(1,i*n)=exp(pi)*sin(pi*i/(n+1))+((i/(n+1))^2)/2;
    end
% Megj.: Most az u(x,0) perem nullával egyenlõ. 

% Jobboldal elkészítése

F=[];
for i=1:n
    for j=1:n
        F(i,j)=(i/(n+1))^2+(j/(n+1))^2;
    end;
end;
nincsperem1=reshape(F,1,n^2);
nincsperem=nincsperem1';

f=nincsperem-g1'/(h^2)-g2/(h^2)-g3/(h^2);

%% A LAER megoldása, azaz y numerikus megoldás megadása
y=A_h\f;

%% A pontos megoldás betöltése
G=[];
for i=1:n
    for j=1:n
  G(i,j)=exp(pi*i/(n+1))*sin(pi*j/(n+1))+(1/2)*(i/(n+1))^2*(j/(n+1))^2;
    end;
end;
ered1=reshape(G,1,n^2);
ered=ered1';

%% Hibaszámítás és plottolás 

maximumnorma=norm(ered-y,'inf');

% A pontos megoldás, a numerikus megoldás és a hiba kirajzolása
ugrid = reshape(ered,n,n);
mesh(h:h:n*h',h:h:n*h',ugrid')
title('A pontos megoldás')
pause
apgrid = reshape(y,n,n);
mesh(h:h:n*h',h:h:n*h',apgrid')
title('A közelítõ megoldás')
pause
errgrid = reshape(ered-y,n,n);
mesh(h:h:n*h',h:h:n*h',errgrid')
title('Hibafüggvény')
