%
% risolve il laplaciano misto con i p2p0
%
% [x,s,u]=p2p0(a,b,n)
%
function [x,s,u]=p2p0(a,b,n)
h=(b-a)/n;
x=(a:h:b)';
%
% costruzione di A
%
A=zeros(n+1+n,n+1+n);
A(1:n+1,1:n+1)=...
  1/6*h*diag(ones(1,n),-1)+2/3*h*diag(ones(1,n+1))+1/6*h*diag(ones(1,n),1);
A(1,1)=1/3*h; A(n+1,n+1)=1/3*h;
A(n+1+1:n+1+n,n+1+1:n+1+n)=8/15*h*diag(ones(1,n));
for i=1:n
  A(i,n+1+i)=h/3;
  A(i+1,n+1+i)=h/3;
  A(n+1+i,i)=h/3;
  A(n+1+i,i+1)=h/3;
end
%
% costruzione di B
%
B=zeros(n,n+1+n);
for i=1:n
  B(i,i)=-1;
  B(i,i+1)=1;
end
%
% la matrice M
%
M=[A B';B zeros(n,n)];
%
% il termine noto
%
F=zeros(n+1+n+n,1);
F(n+1+n+1:n+1+n+n)=-g((x(1:n)+x(2:n+1))/2)*h;
%
% il calcolo della soluzione
%
X=M\F;
s=X(1:n+1+n);
u=X(n+1+n+1:n+1+n+n);
