title: Hermite interpolation in Python
body: <p>I have this program for calculating Hermite interpolation.</p>
  
  <p>Problem is, that its behave really bad. 
  <img src="https://i.stack.imgur.com/p0jF0.png" alt="interpolation for 35 Chebyshev nodes"></p>
  
  <p>This is chart for 35 Chebyshev nodes. If I put more points, peak on the beginning will be higher(its about 10^7 with this amount of nodes).</p>
  
  <p>I interpolated this same function using Lagrange method (green, its shifted so it can be seen) and as you can see it looks fine.</p>
  
  <p>Here is the code:</p>
  
  <pre><code>def hermit_interpolate(input): #input is list of tuples [(x1,y1),(x2,y2)...] xi are Chebyshev nodes
  points = [(input[0][0], input[0][1] - 0), (input[0][0], calculate_f_p_x(input[0][0]))] #"input[0][1] - 0" this is just to change type of second element
                                                                                      #calculate_f_p_x returns value of derivative
  for k in range(1, len(input)): #Divided differences and derivatives in one list alternately
      points.append((input[k][0], (input[k][1] - input[k - 1][1]) / (
          input[k][0] - input[k - 1][0])))
      points.append((input[k][0], calculate_f_p_x(input[k][0])))
  x, c = zip(*points)
  x = list(x)
  c = list(c)
  n = len(points)
  for i in range(2, n): #calculating factors
      for j in range(n - 1, i - 1, -1):
          c[j] = (c[j] - c[j - 1]) / (x[j] - x[j - i])
  
  def result_polynomial(xpoint): #here is function to calculate value for given x
      val = c[0]
      factor = 1.0
      for l in range(1, n):
          factor *= (xpoint - x[l - 1])
          val += (c[l] * factor)
      return val
  
  return result_polynomial
  </code></pre>
  
  <p>I can't seen what's wrong here.
  Thanks!</p>