function [U,k] = milnica(a,n,fun,tol,maxk,metoda)
% funkcija [U,k] = milnica(a,n,fun,tol,maxk,metoda) izracuna 
%obliko milnice na kvadratu [-a,a]^2, 
% ce so podane robne vrednosti
% n+2 je stevilo delilnih tock na eni koordinatni osi
% fun je funkcija spremenljivke x in a, ki vrne vrednosti na robu
% in sicer matriko s stirimi vrsticami [levo; zgoraj;desno;spodaj]
% parametre maxk in tol podamo funkciji laplace
%metoda je stikalo, ki pove ali zelimo:
%'Jacobi'=Jacobijevo iteracijo
%'Gauss-Seidel'=Gauss-Seidelovo iteracijo
%'SOR'=SOR iteracijo

% Dolocimo robne vrednosti
x = linspace(-a,a,n+2);
rp = feval(fun,x,a);

Up=zeros(n+2);
Up(:,1) = rp(1,:)';
Up(:,n+2) = rp(3,:)';
Up(1,2:n+1) = rp(2,2:n+1);
Up(n+2,2:n+1) = rp(4,2:n+1);

switch lower(metoda)
	case {'jacobi'}
		[U,k]=laplace_jac(Up,tol,maxk);
	case {'gauss-seidel'}
		[U,k]=laplace_gs(Up,tol,maxk);
	case {'sor'}
		w=input('Podajte parameter w za SOR metodo: ');
		[U,k]=laplace_sor(Up,w,tol,maxk);
end
enke=ones(1,n+2);
robx = [ -a*enke x a*enke x ];
roby = [ x  a*enke x  -a*enke];
U=flipud(U);
clf
hold on
plot3(robx, roby, reshape(rp',1,4*length(rp)),'r*');
surf(x,x,U);
xlabel('X');ylabel('Y');
%axis equal
hold off
