%
% Genero la matrice dei coefficienti e il temine noto del 
% problema ellittico
%
%  u''(x) = f(x)     su (0,1)
%
%  u(0) = u0 u(1)=u1
%
%  N      = numero i suddivisioni dell'intervallo [0,1]
%  f      = funzione termine sorgente
%  u0, u1 = condizioni al contorno
%
%  A = matrice dei coefficienti
%  b = termine noto
%
%  la soluzione è posta nei vettori colonna X e Y che contengono
%  i valori nodali nella mesh compreso i termini al bordo
%
%  X = X(i) coodinata x del nodo (i)
%  Z = Z(i) coodinata z della soluzione nel nodo (i)
%
%         +                 +
%    1    |                 |
%  -----  |  1    -2     1  |  u_i = f_i
%   h^2   |                 |
%         +                 +
%
function [A,b,X,Y] = bvp(N,f,u0,u1)
  %
  h   = 1/N ; % dimensione della mesh
  neq = N-1 ;

  % coefficienti dello stencil
  h2 = h^2 ;

  % costruzione della matrice dei coefficienti
  A = sparse( neq, neq ) ;
  b = zeros ( neq, 1   ) ;

  for i=1:neq
    x = i*h ;

    % termine noto
    b(i) = h2*feval( f, x ) ;

    % coefficienti dello stencil
    A(i,i) = -2 ;
      
    if i > 1
      A(i,i-1) = 1 ;
    else
      b(i) = b(i) - u0 ;      
    end

    if i < neq
      A(i,i+1) = 1 ;
    else
      b(i) = b(i) - u1 ;      
    end
  end
  
  % calcolo la soluzione
  SOL = A\b ;

  % riempio i vettori X e Y con la soluzione
  Y = [ u0 ; SOL ; u1 ] ;
  X = [ 0:h:1 ]' ;

end
