O seguinte algoritmo em Mathematica permite,  
    dada uma  tabela de valoresde uma função F (Tabf) , e um ponto x, 
    que não pertence à tabela,  calcular um valor aproximado de F (x):

Approx[Tabf_, x_] := 
      Module[{n, nos, valores, Matriz, A},  n = Length[Tabf]; 
        nos = Table[Tabf[[i, 1]], {i, n}];  
        valores = 
          Table[Tabf[[i, 2]], {i, n}]; 
Matriz = 
          Table[nos[[j]]^(i - 1), {j, 1, n}, {i, 1, 
              n}]; 
A = 
          LinearSolve[Matriz, valores]; 
Px = 
          Sum[A[[i]] x^(i - 1), {i, 1, n}]]

Exemplo;

f[x_] := x^2 + x + 1

Tabf = Table[{i, f[i]}, {i, 1, 3}]

Approx[Tabf, 3.5]

Verificação:

f[3.5]

Matriz

A

1) Supondo que o polinómio interpolador correspondente a um certo caso é P (x) = 
      a x^4  - bx^2 + c x  + 1,  
    quais deverão ser neste caso os valores de n e da lista A?

Neste caso,  
    o polinómio interpolador é de grau 4,  portanto,  
    tem 5 coeficientes,  
    logo n = 5.  A é a lista dos coeficientes,  
    logo A = {1, c, -b, 0, a}.

2) 
      Escreva um algoritmo em Mathematica que permita obter o mesmo resultado a partir dos mesmos dados,  
    mas usando a fórmula interpoladora de Lagrange .  Nota :  pode usar no algoritmo os símbolos de somatório e pi - atório . 
 Sugestão :  
                comece por definir funções para os polinómios fundamentais de Lagrange.

Resolução:

Comecemos por definir os polinómios  fundamentais de Lagrange     Pol1 (x),  Pol2 (x),  ... , 
    Poln (x) .  
        Definindo primeiro o numerador e de pois o denominador, temos:

Num[i_, 
        t_] := ((∏_(j = 1)^(i - 1))(t - 
                nos[[j]])) ((∏_(j = i + 1)^n)(t - 
                nos[[j]])); 
    Den[i_] := ((∏_(j = 1)^(i - 1))(nos[[i]] - 
                nos[[j]])) ((∏_(j = i + 1)^n)(nos[[i]] - nos[[j]])); 
    Pol[i_, t_] := Num[i, t]/Den[i]

Approx1[Tabf_, x_] := ( n = Length[Tabf]; 
        nos = Table[Tabf[[i, 1]], {i, n}];  
        valores = 
          Table[Tabf[[i, 2]], {i, 
              n}]; 
Px = (∑_(i = 1)^n) Pol[i, x]*
              valores[[i]])

Teste:

Approx1[Tabf, 4]

f[4]

Suponhamos  que se pretende interpolar a função f,  
    não por um polinómio intepolador,  
    mas por uma função do tipo
q (x) = b0  +  b1 Cos (x) +  
            b2 Cos (2  x) +  ...  = (∑_(i = 1)^n) 
            bi Cos (ix) .  
              Escreva uma algoritmo em Mathematica que receba os mesmos dados e que a função  Approx e devolva o valor da aproximação neste caso.

Approx2[Tabf_, x_] := ( n = Length[Tabf]; 
        nos = Table[Tabf[[i, 1]], {i, n}];  
        valores = 
          Table[Tabf[[i, 2]], {i, n}]; 
Matriz = 
          Table[Cos[(i - 1) nos[[j]]], {j, 1, n}, {i, 1, 
              n}]; 
A = 
          LinearSolve[Matriz, valores]; 
Px = 
          Sum[A[[i]] Cos[(i - 1)*x], {i, 1, n}])

Testes:

g[x_] = 1.   +  Cos[x] + Cos[2  x]

Tabg = Table[{i, g[i]}, {i, 1, 3}]

Approx2[Tabg, 3.5]

g[3.5]

Tabf = {{1. , f[1. ]}, {2. , f[2. ]}, {3, f[3. ]}}

Approx2[Tabf, 2]