segunda-feira, 14 de novembro de 2016

Regressão polinomial: uma curva passando por muitos pontos.


Na interpolação, dado um conjunto de pontos em um plano XY se deseja calcular uma curva que passa exatamente por esses pontos. Se existem muitos pontos, pode-se calcular uma curva que passa por entre esses pontos de tal forma que a distância média entre a curva e os pontos seja mínima, isso é uma regressão (que pode ser linear ou não linear).

A regressão é "linear" se a relação da resposta às variáveis é uma função linear de alguns parâmetros. Nesta postagem apresentamos uma regressão polinomial usando Scilab: dado um conjunto de muitos pontos ruidosos, podemos calcular uma curva polinomial que passa por esses pontos.




Código Scilab:


clc; close;

// Pontos:
X = 0:0.01:3;
X = X + 0.001*rand(1,max(size(X)),'n');
Y = 1 + cos(X/1.5);
Y = Y + 0.01*rand(1,max(size(X)),'n');

plot(X,Y,'.');

plot([-0.01, 3.01],[0.01, 2.48],'wx');
title('Muitos pontos, uma curva polinomial');
xgrid; xlabel('x'); ylabel('y');

///////////////
tp1 = X; s1 = sum(tp1);
tp2 = X.*X; s2 = sum(tp2);
tp3 = X.*X.*X; s3 = sum(tp3);
tp4 = tp3.*X; s4 = sum(tp4);
tp5 = tp4.*X; s5 = sum(tp5);
tp6 = tp5.*X; s6 = sum(tp6);
yi = sum(Y);
yixi = sum(Y.*tp1);
yixi2 = sum(Y.*tp2);
yixi3 = sum(Y.*tp3);

Mb = [max(size(t)), s1, s2, s3
      s1, s2, s3, s4
      s2, s3, s4, s5
      s3, s4, s5, s6];
vy = [yi; yixi; yixi2; yixi3];
b = inv(Mb)*vy;

pb = b(1) + b(2)*X + b(3)*X.*X + b(4)*X.*X.*X;
plot(t,pb,'m');

disp(b);

Um comentário: