/// Résolution du problème nonlinéaire
/// avec conditions de Dirichlet homogènes
/// u''(x)+10*sin(u(x)) = 0 sur (0,1)
///  u(0) = u(1) =0

funcprot(0)

/// Assemblage de la matrice du Laplacien discret
function A = Laplacien(J) 
    dx = 1/(J+1);
    A = sparse(-2*eye(J,J)+diag(ones(J-1,1),1)+diag(ones(J-1,1),-1));
    A = A/(dx^2);
endfunction

function B = Diff(J)
    dx = 1/(J+1);
    B = sparse(-diag(ones(J-1,1),1)+diag(ones(J-1,1),-1));
    B = B/dx;
endfunction

function F = Pendule(X,J,M)
    F = Laplacien(J)*X+M*sin(X);
endfunction

function DF = Jacobian(X,J,M)
    DF = Laplacien(J)+M*sparse(diag(cos(X)));
endfunction



M = 10;
L = 1;
J = 200;
dx= L/(J+1);      // pas en espace
x = (1:J)'*dx;    // points de la grille 
xb = (0:J+1)'*dx; // grille incluant les bords
lamb = dx^2;  
tol = 10^(-10);

/// Initialisation pour la méthode de Newton
Sol0 = x.*(1-x);
Sol = Sol0;
nstep = 1;

/// Méthode de Newton
while abs(Pendule(Sol,J,M))>tol
     B = Jacobian(Sol,J,M);
     Sol = Sol-B\Pendule(Sol,J,M);
     nstep = nstep+1;
end

figure(1)
plot(xb,[0;Sol;0],'d')

figure(2)
plot(Sol,Diff(J)*Sol,'d',-Sol,-Diff(J)*Sol,'d')
