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:") 

Comentários

Postagens mais visitadas deste blog

Método da Interpolação por Eliminação Gaussiana em Scilab

Método de Interpolação de Lagrange em Scilab