Escreva um algoritmo em Scilab, e copie o código na resposta, que dados os
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
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
.
Passo 1
Beleza, o exercício pede pra gente escrever um algoritmo em Scilab que, dados
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:
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
.
- Perguntar
(grau do polinômio). - Ler
. - Perguntar opção:
- Se for 1 (função), ler string da função, usar
evl
pra avaliar em cadae preencher . - Se for 2 (vetor), ler diretamente cada
.
- Se for 1 (função), ler string da função, usar
Passo 3
Agora vamos montar a tabela de diferenças divididas. A gente cria uma matriz
de tamanho
:
- Coluna 1 (
): . - Para
até :
paraaté ,
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);