
function u=poisson5pts_II(n,f,g_left,g_right,g_down,g_up)

% ATKINSON. P. 559.% RICORDARSI CHE LA MATRICE DI MAKEFISH HA SEGNO OPPOSTO A QUELLA DA UTILIZZARE!!
A=-makefish(n);

h=1/(n+1); 

x=(h:h:1-h)'; y=x;

% SOLUZIONI IN BASSO.
x_loc=x;
y_loc=zeros(size(x_loc));
b_down=feval(g_down,x_loc,y_loc);

% SOLUZIONI IN ALTO.
y_loc=ones(size(x_loc));
b_up=feval(g_up,x_loc,y_loc);

% SOLUZIONI A SINISTRA.
y_loc=x_loc; x_loc=zeros(size(x_loc));  
b_left=feval(g_left,x_loc,y_loc);

% SOLUZIONI A DESTRA
x_loc=ones(size(x_loc)); 
b_right=feval(g_right,x_loc,y_loc);

% COMPOSIZIONE TERMINE NOTO.
b1=b_down; 

% PRIMA RIGA IN BASSO.
b1(1)=b1(1)+b_left(1); b1(n)=b1(n)+b_right(1); 

% PRIMA RIGA IN ALTO.
bn=b_up; bn(1)=bn(1)+b_left(n); bn(n)=bn(n)+b_right(n); 

% RIGHE INTERMEDIE.
bj=[];
for j=2:(n-1)
    bjloc=zeros(n,1);
    bjloc(1)=bjloc(1)+b_left(j); bjloc(n)=bjloc(n)+b_right(j);
    bj=[bj; bjloc];
end

b=[b1; bj; bn];

% GRIGLIA LESSICOGRAFICA.

[X,Y]=meshgrid(x,y);
X=X'; Y=Y';


% VALUTAZIONE f NEI PUNTI INTERNI DELLA GRIGLIA.
fXY=feval(f,X,Y);

% TERMINE NOTO.
b_f=(h^2)*fXY;
b_f=b_f(:);

b=b_f-b;

% SOLUZIONE NEI PUNTI DELLA GRIGLIA.
u=A\b;
