clear all
%Méthode de moindre carrées : cliquer RUN pour voir l'exemple
disp('Méthode de moindre carrées')
disp('Soient les données (x,y) = (1,1), (2,5), (3,6), (4,8), (5,3)')
disp('>> xdata = 1:1:5;')
disp('>> ydata = [1, 5, 6, 8, 3];')

xdata = 1:1:5
ydata = [1, 5, 6, 8, 3]

disp('(Taper une clef pour continuer)')
pause;

disp('Mais ce sont des lignes; transformer les vecteurs xdata et ydata en vecteurs colonne')
disp('>> xdata = xdata''; ydata = ydata'';   % attention: si complexe, utiliser transpose(xdata)!!')
xdata = transpose(xdata)
ydata = transpose(ydata)

disp('(Taper une clef pour continuer)')
pause;

disp('On veut trouver une équation quadratique ax^2+bx+c qui passe bien par ces points')
disp('Donc on forme la matrice de valeurs ')
disp('>> A = [xdata.^2 xdata ones(5,1)];')
disp('Rem:  xdtata.^2 =(x1^2,x2^2,...); ones(5,1) = (1,1,1...)')

A = [xdata.^2 xdata ones(5,1)]

disp('(Taper une clef pour continuer)')
pause;

disp('C''est un système incohérent! Voyez:  >> rref([A eye(5)])')
rref([A eye(5)])

disp('Donc il faut résoudre A^T * A * u = A^T * ydata, pour l''inconnu u = [a;b;c]')

disp('Méthode 1:  >>  u = inv(A''*A)*(A''*ydata)') 

u = (ctranspose(A)*A)\(ctranspose(A)*ydata)

disp('Méthode 2 (Matlab): u = A\ydata fonctionne bien aussi puisque \ donne la ')
disp('solution des moindres carrées quand A n''est pas carrée')

a = u(1);
b = u(2);
c = u(3);

disp('Alors:  a = u(1); b = u(2); c = u(3);')

u'

disp('(Taper une clef pour continuer)')
pause;

disp(' ')
disp('Maintenant tracer (plot) les points de données [xdata, ydata] sur le même graphe ') 
disp('que le polynôme quadratique P(x) = ax^2+bx+c ainsi obtenu, sur l''intervalle [0,6]')
disp(' ')
disp('Puisque nous voulons une courbe lisse, utilisez beaucoup de points:')
disp(' ')
disp('Créer un vecteur ligne de 1000 points également espacés entre 0 et 6')
disp('>> xp = linspace(0, 6, 1000); yp = a*xp.^2 + b*xp + c;')

xp = linspace(0, 6, 1000);
yp = a*xp.^2 + b*xp + c;

disp('(Taper une clef pour continuer)')
pause;

disp(' ')
disp('Ouvrir une nouvelle fenetre de figure:  >> figure;')

figure; % ouvrir une nouvelle fenetre de figure

disp('Tracer les points de données [xdata, ydata] en tant que points noirs (.k) de taille 15')
disp('>>  plot(xdata, ydata, ''.k'', ''MarkerSize'',15)')
plot(xdata, ydata, '.k', 'MarkerSize',15)

disp('(Taper une clef pour continuer)')
pause;

disp(' ')
disp('Dire à Matlab de ne pas effacer la figure existant pendant qu''on trace le prochain')
disp('>>  hold on')
hold on % dire a Matlab de ne pas effacer le tracÃ© existant quand on trace le prochain tracÃ©
disp(' ')
disp('Tracer le polynôme quadratique P, en rouge ''r'' avec une ligne de largeur 2') 
%  (approchant les donnÃ©es [xdata, ydata]) en tant qu'une courbe (couleur = rouge, largeur = 2)
disp('>>  plot(xp, yp,''r'',''LineWidth'',2);')
plot(xp, yp,'r','LineWidth',2);
disp(' ')

disp('(Taper une clef pour continuer)')
pause;
disp(' ')
disp('Ajouter les axes:')
disp(' ')
disp('>> set(gca, ''FontName'',''times'',''FontSize'',14);')
set(gca, 'FontName','times','FontSize',14); % DÃ©finir les nombres sur les axes:  (police Times New Roman, taille 14)
disp(' ')
disp('>>  xlabel(''x''); ylabel(''y'');') 

xlabel('x')
ylabel('y')

disp('Définir les limites de y dans le graphe:')
disp('>>  ylim([-6,9]);')
ylim([-6,9]) % DÃ©finir les limites du tracÃ© (plot) :  (-6, 9) dans la direction des y

disp(' ')
disp('Matlab aurait pu nous trouver le polynôme directement aussi, à l''aide de la')
disp('fonction polyfit:  >> p = polyfit(xdata, ydata, 2) ;')

disp(' ')
disp('Fin de MoinCarr.m')



