# TP 2 ANALYSE NUMERIQUE

# entrees  
# t : le point ou on veut evaluer le polynome dinterpolation
# x : une liste qui contient les abscisses des points dinterpolation
# y : une liste qui contient les ordonnees des points dinterpolation
# dy :  une liste qui contient la valeur de la derivee aux points dinterpolation.
# sorties :
# p : levaluation du polynome en t

from math import *
from sys import *

def lagrange(t,x,y):
      p = 0
      n = len(x)
      L = [1 for i in range(n)]
      for i in range(n):
            for j in range(n):
                  if j!=i:
                        L[i] *= (t-x[j])/(x[i]-x[j])
            p += y[i]*L[i]
      return p

def hermite(t,x,y,dy):
      p = 0
      n = len(x)
      L = [1 for i in range(n)]
      c = [0 for i in range(n)]
      for i in range(n):
            for j in range(len(x)):
                  if j!=i:
                        L[i] *= (t-x[j])/(x[i]-x[j])
                        c[i] += 1./(x[i]-x[j])
            p += (y[i]*(1.-2.*(t-x[i])*c[i])+dy[i]*(t-x[i]))*L[i]**2
      return p

