Cálculo do Erro para Interpolação em Scilab
Versão do Scilab: 5.5.2
clear
clc
function [orderValues] = getOrder(lastOrder, vectorX, orderNumber)
for i = 1 : size(lastOrder, 2) - 1 // size 1 = quantas linhas, size 2 = quantas colunas
orderValues(1,i) = (lastOrder(1,i+1) - lastOrder(1,i)) / (vectorX(1,orderNumber+i-1) - vectorX(1,i))
end
endfunction
function [f, polyF] = newtonInterpol(vectorY, vectorX)
lastOrder = vectorY
polyF = poly([vectorY(1,1)],"x", "coeff")
for i = 2 : size(vectorX, 2) // size 1 = quantas linhas, size 2 = quantas colunas
lastOrder = getOrder(lastOrder, vectorX, i)
polyA = poly([-vectorX(1,1) 1],"x","coeff")
for j = 2 : i-1
polyA = polyA * poly([-vectorX(1,j) 1],"x","coeff")
end
polyA = polyA * lastOrder(1,1)
polyF = polyF + polyA
end
deff("y = f(x)","y = " + pol2str(polyF))
endfunction
function [erro] = getError(testX, selectedNX, completeNX, vectorY)
result = 1;
for i = selectedNX
result = result * (testX - i)
end
lastOrder = vectorY
for j = 2 : (size(selectedNX, 2) + 1) // size 1 = quantas linhas, size 2 = quantas colunas
lastOrder = getOrder(lastOrder, completeNX, j)
end
erro = abs(result) * max(abs(lastOrder))
endfunction
//ENTRADA DE DADOS
//xn são todos os pontos fornecidos pelo problema
//yn são todos os pontos fornecidos pelo problema
xn = [60 70 80 100 120 140]
yn = [17.7 24.1 31.5 49.2 70.8 96.4]
//Logo xn e yn tem que ser declarados por completo
[f,polyF] = newtonInterpol(yn,xn)
// getError(PONTO,[x0 x1 x2 x3], xn, yn) => pontos que serão interpolados
//Ponto acima, é o que queira calcular, assim teremos um erro para aquele ponto
//os pontos dentro dos "[]" são os pontos que queiramos calcular o erro
disp(getError(75,[60 70 80 100],xn,yn), "Erro para o ponto que queira calcular:")
clear
clc
function [orderValues] = getOrder(lastOrder, vectorX, orderNumber)
for i = 1 : size(lastOrder, 2) - 1 // size 1 = quantas linhas, size 2 = quantas colunas
orderValues(1,i) = (lastOrder(1,i+1) - lastOrder(1,i)) / (vectorX(1,orderNumber+i-1) - vectorX(1,i))
end
endfunction
function [f, polyF] = newtonInterpol(vectorY, vectorX)
lastOrder = vectorY
polyF = poly([vectorY(1,1)],"x", "coeff")
for i = 2 : size(vectorX, 2) // size 1 = quantas linhas, size 2 = quantas colunas
lastOrder = getOrder(lastOrder, vectorX, i)
polyA = poly([-vectorX(1,1) 1],"x","coeff")
for j = 2 : i-1
polyA = polyA * poly([-vectorX(1,j) 1],"x","coeff")
end
polyA = polyA * lastOrder(1,1)
polyF = polyF + polyA
end
deff("y = f(x)","y = " + pol2str(polyF))
endfunction
function [erro] = getError(testX, selectedNX, completeNX, vectorY)
result = 1;
for i = selectedNX
result = result * (testX - i)
end
lastOrder = vectorY
for j = 2 : (size(selectedNX, 2) + 1) // size 1 = quantas linhas, size 2 = quantas colunas
lastOrder = getOrder(lastOrder, completeNX, j)
end
erro = abs(result) * max(abs(lastOrder))
endfunction
//ENTRADA DE DADOS
//xn são todos os pontos fornecidos pelo problema
//yn são todos os pontos fornecidos pelo problema
xn = [60 70 80 100 120 140]
yn = [17.7 24.1 31.5 49.2 70.8 96.4]
//Logo xn e yn tem que ser declarados por completo
[f,polyF] = newtonInterpol(yn,xn)
// getError(PONTO,[x0 x1 x2 x3], xn, yn) => pontos que serão interpolados
//Ponto acima, é o que queira calcular, assim teremos um erro para aquele ponto
//os pontos dentro dos "[]" são os pontos que queiramos calcular o erro
disp(getError(75,[60 70 80 100],xn,yn), "Erro para o ponto que queira calcular:")
Comentários
Postar um comentário
Obrigado pelo contato, retornarei o mais breve possível!