% fait le fit de sin(x) sur -pi/2, pi avec bruit uniforme

% exercice 7 du TD 1 du Master IAC 2010
% tronc commun ASO (Apprentissage Statistique et Optimisation)

function [erreurTrain erreurTest] = fitSinusBruitee(nbPoints, degre, bruit, affichage=0)
% paramtres
% nbPoints : nombre de points
% degre : degr de l'approximation polynomiale
% bruit : niveau de bruit (uniforme)
% affichage : fautil afficher ou pas
%
% retour
% erreur : erreur au sens des moindres carrs
%
x=[-pi/2:pi/nbPoints:pi];
y=sin(x);
trainData=y+bruit*(2*rand(1,size(x,2))-1);
testData=y+bruit*(2*rand(1,size(x,2))-1);
% Calculate fit parameters
[p,ErrorEst] = polyfit(x,trainData,degre);
% disp("Le polynme") ; disp (p); 
% Evaluate the fit
pop_fit = polyval(p,x);
erreurTrain = sqrt(sumsq(pop_fit-trainData));
erreurTest = sqrt(sumsq(pop_fit-testData));
% disp(['Norme de l''erreur ' num2str(erreur)]);
% Plot the data and the fit
if (affichage)
plot(x,pop_fit,'-',x,trainData,'+',"MarkerSize",15,x,testData,'go',"MarkerSize",15,x,y,"r-");
endif
% pause
return ;
