function [A]=mat_ellipt_2D(N, sigma)

% questa funzione costruisce la matrice del problema - \Delta u + sigma * u = f  nel
% quadrato di lato unitario, con condizioni di Dirichlet omogenee al bordo
%
% input   N      nodi su ogni lato del quadrato
%         sigma  coefficiente del problema ai limiti
%
% output  A      matrice del problema discretizzato mediante differenze finite centrate
%

if (N<4) error('N deve essere >= 4 affinchè si abbia almeno una matrice 2x2  !!!'); end

h=1/(N-1);     % passo della griglia
n=(N-2);       % numero di variabili sul lato = numero di nodi sul lato - numero di nodi di Dirichlet sul lato
A=sparse(n^2,n^2);     % inizializza A ad una matrice [(N-2)^2 x (N-2)^2] sparsa
for i=1:n
  for j=1:n
    k = i + n*(j-1);
    A(k,k) = 4/h^2 + sigma;
    if i > 1      A(k,k-1) = -1/h^2;   end
    if i < n      A(k,k+1) = -1/h^2;   end
    if j > 1      A(k,k-n) = -1/h^2;   end
    if j < n      A(k,k+n) = -1/h^2;   end
  end
end
                
