
// La fonction diff_div calcule la différence divisée de la liste X (associée à la liste Y). Dans le TD c'est [x0,x1,...,xn]. Cela permet de déterminer les coefficients du polynome de Newton.
// Au vu de la définition [x0,x1,...,xn], le plus simple semble de faire une fonction récurssive
function d=diff_div(X,Y)
    if length(X)==1 then
        d=Y(1)
    else
        d=(diff_div(X(2:$),Y(2:$))-diff_div(X(1:$-1),Y(1:$-1)))/(X($)-X(1))
    end
endfunction

function R=newton(X,Y,T)
    R=[]
    for j=1:length(T)
        s=0
        pr=1
        for k=1:length(X)
            s=s+diff_div(X(1:k),Y(1:k))*pr
            pr=pr*(T(j)-X(k))
        end
        R=[R,s]
    end
endfunction


// Remarque : en terme d'optimisation il y auarait des choses à faire sur ces fonctions. En effet pour calculer diff_div(X,Y) avec X et Y des listes de taille n, il y a besoin de calculer les diff_div des "sous-listes" de taille inférieur.
// Or on refait plusieurs fois le calcul des diff_div de même liste ce qui est une perte de temps inutile. On pourrait les calculer qu'une fois et les stoker en mémoire.
// C'est une amélioration à faire : modifier la fonction diff_div pour renvoyer la liste de toutes les diff_div plutôt que juste la dernière (comme actuelement). Il faudrait par contre bien gérer la mémoire.
