function demopoisson5pts(demo_example)
switch demo_example
    case 1
        f=@(x,y) zeros(size(x));
        g_down=@(x,y) ones(size(x)); g_up=@(x,y) ones(size(x));
        g_left=@(x,y) ones(size(x)); g_right=@(x,y) ones(size(x));
        solution=@(x,y) ones(size(x));
    case 2
        f=@(x,y) zeros(size(x));
        g_down=@(x,y) exp(pi*x); g_up=@(x,y)-exp(pi*x);
        g_left=@(x,y) cos(pi*y); g_right=@(x,y) ((exp(1))^pi)*cos(pi*y);
        solution=@(x,y) (exp(pi*x)).*cos(pi*y);
    case 3
        f=@(x,y) (-2*(pi^2))*sin(pi*x).*sin(pi*y);
        g_down=@(x,y) zeros(size(x)); g_up=@(x,y) zeros(size(x));
        g_left=@(x,y) zeros(size(x)); g_right=@(x,y) zeros(size(x));
        solution=@(x,y) (sin(pi*x)).*sin(pi*y);
    otherwise
        f=@(x,y) ones(size(x));
        g_down=@(x,y) zeros(size(x)); g_up=@(x,y) zeros(size(x));
        g_left=@(x,y) zeros(size(x)); g_right=@(x,y) zeros(size(x));
        solution=@(x,y) (sin(pi*x)).*sin(pi*y);
end
err=[];
for n=[4 8 16 32]
    [x_grid,y_grid,u_grid]=poisson5pts(n,f,g_left,g_right,g_down,g_up);
    sol_grid=feval(solution,x_grid,y_grid);err(end+1)=max(abs(sol_grid-u_grid));
    fprintf('\n \t [n]: %4.0f [MAX.ERR.]: %2.2e',n,err(end));
end
fprintf('\n');