% régression linéaire de points sur une parabole bruitée
% exercice 6 du TD 1 du Master IAC 2010
% tronc commun ASO (Apprentissage Statistique et Optimisation)
function erreur = regressionLineaire(numPoints,bruit=0)
% numPoints : nombre de points (si si)
% bruit : niveau de bruit (ici additif)

% on va calculer "à la main" (et pas par polyfit) les coefficients
% de la droite de régression en annulant les dérivées partielles
% de l'erreur au sens des moindres carrés

% Les données - parabole bruitée sur [1-10]
x=1:10/(numPoints-1):10;
y=x.*x + bruit*rand(1,size(x,2));

A = [ sum(x.*x) sum(x) ; mean(x) 1];
B = [sum(x.*y) ; mean(y)];

sol =A\B; % contient Wopt et b
w=sol(1,1)
b=sol(2,1)
regress = w*x+b;
plot(x,y,'+', x,regress);
% calcul de l'erreur au sens de moindres carrés
erreur = sumsq(regress-y);
disp(["Erreur au sens des moindres carres : " num2str(erreur)]);
  