human
I am working on the file "Física Computacional/Ficha 1 - Interpolacao.ipynb".
The first task is:
Dados um conjunto de pontos $x$, suas respectivas imagens $y$ e um intervalo de pontos x_new:
+ Calculam-se os Coeficientes com o método das diferenças divididas
+ Para cada ponto de x_new, aplica-se o polinómio, obtendo os valores de y_new.
Can you write Python code for it?
assistant
#Here is the Python code you requested.

func_x = lambda x: 1/ (1 + x**2) # Função dada

def xinterval(x_i, x_f, n):
    " Gera um array de 'n' pontos equidistantes entre 'x_i' e 'x_f' "
    xn = np.linspace(x_i, x_f, num = n)
    return xn

def newtoninterp(x, y, x_new):
    """ Dados um conjunto de pontos 'x', suas respectivas imagens 'y', e
    um intervalo de pontos 'x_new' para o qual se vão aplicar o
    polinómios """

    n = len(x)
    
    def difdiv(xi):
        "Cálculo dos coeficientes através do método das diferenças divididas"
        d = list(y)
        for j in range(1, n):
            for i in range (n-1, j-1, -1): # intervalo escolhido de forma a evitar dependências de variáveis no cálculo
                d[i] = (d[i]-d[i-1]) / (xi[i] - xi[i-j]) 
        return d

    def interpol(coef, x_pts, x_new):
        y_new = []
        for pt in x_new:
            co = coef[len(coef)-1] # último coeficiente
            for i in range(n-2, -1, -1): # intervalo para multiplicar do último ponto para o primeiro, sem dependências
                co *= pt - x_pts[i]
                co += coef[i]
            y_new.append(co)
        return y_new
    coef_l = difdiv(x)
    ypol = interpol(coef_l, x, x_new)
    return ypol, coef_l