Escreva um algoritmo em Scilab, e copie o código na resposta, que dados os n+ 1 pontos fornecidos pelo usuário retorne a tabela de diferenças dividias. O programa deverá perguntar para o usuário se ele vai entrar com a função ou com um vetor Y corresponde aos valores da função nos pontos. Se o usuário escolher entrar com a função, o programa deve reconhecer a função e calcular o vetor Y.

Passo 1

Beleza, o exercício pede pra gente escrever um algoritmo em Scilab que, dados f[xi,dots,xi+j] ;=;f[xi+1,dots,xi+j]-f[xi,dots,xi+j-1]xi+j-xi pontos , construa a tabela de diferenças divididas de Newton.
Conteúdo: Interpolação polinomial via diferenças divididas.
O que a gente vai precisar:
  • Ler do usuário o número de pontos e o vetor .
  • Perguntar se ele vai fornecer uma função ou o vetor .
  • Se for função, converter a string pra uma função Scilab e calcular .
  • Montar a matriz de diferenças divididas usando a fórmula

Passo 2

Vamos ler os dados do usuário e decidir se ele fornece a função ou o vetor .
  1. Perguntar (grau do polinômio).
  2. Ler .
  3. Perguntar opção:
    • Se for 1 (função), ler string da função, usar evl pra avaliar em cada e preencher .
    • Se for 2 (vetor), ler diretamente cada .

Passo 3

Agora vamos montar a tabela de diferenças divididas. A gente cria uma matriz D(i,j) ;=;D(i+1,j-1)-D(i,j-1)xi+j-1-xi de tamanho :
  • Coluna 1 ( ): .
  • Para até :
    para até ,
Isso constrói a tabela de Newton passo a passo.

Passo 4

Hora de transcrever tudo pro código Scilab! O programa lê dados, preenche conforme a escolha, monta e exibe.

Resposta

// Scilab: Tabela de Diferenças Divididas de Newton
clc;
clear;

// Leitura dos dados
n = input("Digite o valor de n (grau do polinômio): ");
x = zeros(n+1,1);
for i=1:n+1
    x(i) = input("Digite x("+string(i-1)+"): ");
end

opt = input("Digite 1 para função ou 2 para vetor Y: ");
if opt==1 then
    strf = input("Digite a função em x (ex: x^2+sin(x)): ", "string");
    for i=1:n+1
        Y(i) = evl(strf, x(i));
    end
else
    for i=1:n+1
        Y(i) = input("Digite Y("+string(i-1)+"): ");
    end
end

// Montagem da tabela de diferenças divididas
D = zeros(n+1, n+1);
D(:,1) = Y'; // primeira coluna

for j=2:n+1
    for i=1:(n+2-j)
        D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j-1) - x(i));
    end
end

// Exibir resultado
disp("Tabela de diferenças divididas:");
disp(D);

Exercícios relacionados