// La fonction prendra en paramètre deux liste X et Y de même taille et une liste T de taille quelconque
// Elle renvoie R=[P(T(1)),P(T(2)),...] avec P le polynome de Lagrange associé aux listes X et Y

function R=lagrangeP(X,Y,T)

    // La vraible R devra contenir à la fin du programme la liste des valeurs P(T(j)). On l'initialise comme la liste vide.
    R=[]

    // On parcours la liste T pour calculer à chaque tour de boucle la valeur P(T(j))
    for j=1:length(T)

        // On mettra dans res la valeur P(T(j))
        res=0

        // On utilise la formule du polynôme de Lagrange appliqué à x=T(j) : P(x) = sum_{i=1}^n y_i L_i(x)
        // Pour calculer la somme on fait une boucle for
        for i=1:length(X)
            
            // On calule la valeur de L_i(T(j)) dans la variable pr
            pr=1
            
            for k=1:length(X)
                
                // L_j est défini comme un produit pour k diffrent de i (ou X(k) différent de X(i)) on utilise donc la condition suivante (pour ne pas diviser par 0)
                if X(k) <> X(i)
                    pr = pr * (T(j)-X(k))/(X(i)-X(k))
                end
                
            end
            
            // Maintenant qu'on a calculé L_j(T(i)) on peut rajouter un terme à la somme dans la variable res
            res = res + Y(i)*pr
            
        end
        
        // On rajoute à la fin de la liste R la valeur P(T(i)) qui se trouve dans la variable res
        R=[R,res]        
    end
    
    // Pas besoin de return car en Scilab la fonction renvoie automatiquement la dernière valeur dans la variable R (qui est indiquée dans la déclaration de la fonction)
endfunction

function R=lagrangef(X,f,T)
    R=lagrangeP(X,f(X),T)
endfunction

