%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SCRIPT POUR PROBLÈME 1 SUR LES MOINDRES CARRES %
%  UTILISATION DES COMMANDES POLYFIT ET POLYVAL  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all, close all, clc

display('CALCUL AVEC LES COMMANDES POLYFIT ET POLYVAL')
display(' ')

% DONNEES DU PROBLEME
x = [10:5:145]';
y = [0.1017 0.0486 0.1157 0.1354 0.1180 0.1668 0.1576 0.1954 0.2831 0.3579 0.4234 0.4030...
0.5069 0.5669 0.5912 0.6937 0.7562 0.9094 0.9511 1.0629 1.1266 1.2702 1.3463 1.4954 1.6189...
1.7448 1.8451 1.9384]';

% DESSIN DU NUAGE DE POINTS
plot(x,y,'o')
xlabel('x'), ylabel('y')
title('Moindres carrés')
hold on

% APPROXIMATION PAR UNE DROITE
display('-----------------------------------------------')
display('Approximation par une droite')
% Calcul de beta par la commande polyfit
beta=polyfit(x,y,1)
% Calcul de l'erreur quadratique moyenne
ychap=polyval(beta,x);
erreur_quadratique_moyenne=norm(ychap-y)
% Dessin de la droite d'approximation
xx=[10:0.1:145]'; yy=polyval(beta,xx);
plot(xx,yy,'m'), grid, grid minor

% APPROXIMATION PAR UN POLYNÔME D'ORDRE 2
display('-----------------------------------------------')
display('Approximation par un polynôme d''ordre 2')
% Calcul de beta par la commande polyfit
beta=polyfit(x,y,2)
% Calcul de l'erreur quadratique moyenne
ychap=polyval(beta,x);
erreur_quadratique_moyenne=norm(ychap-y)
% Dessin de la parabole d'approximation
xx=[10:0.1:145]'; yy=polyval(beta,xx);
plot(xx,yy,'k')