Moindres Carrés

Contents

Remise à zero des fenêtres et des variables

clear all
close all

Importation du fichier de données et création des variables

data=importdata('LongueurRacine.txt');
t=data.data(:,1);
L=data.data(:,2);

Tracé des points de données Longueur=f(temps)

figure();
plot(t,L,'k*');
xlabel('Temps (jours)')
ylabel('Longueur (cm)')

Calcul des différents ajustements linéaires tirés au hasard

%y=a*x+b
%Les nombres a et b sont tirés aléatoirement entre deux bornes raisonnables
N=10000;
a = -5;
b = 5;
r = (b-a).*rand(N,2) + a;
%Tracé des points de calcul
figure()
plot(r(:,1),r(:,2),'k.');

Boucle de calcul de la distance entre l’ajustement et les données

Calcul effectué sur tous les point (a,b) de 1 à N S(i) correspond au score du calcul de la distance

for i=1:N
    Ls(i,:)=r(i,1).*t+r(i,2);
    DMS=(Ls(i,:)'-L).^2;
    S(i)=sum(DMS);
end

Tracé de la surface S(a,b)

x=r(:,1);
y=r(:,2);
z=S';
[xx,yy]=meshgrid(a:0.5:b,a:0.5:b);
zz = griddata(x,y,z,xx,yy);

Calcul du gradient de la surface S(a,b) et tracé

%Calcul et plot du gradient
[px,py] = gradient(zz,.2,.2);
%Plot the contour lines and vectors in the same figure.
figure();
subplot(1,2,1)
surf(xx,yy,zz)
xlabel('pente')
ylabel('oo')
subplot(1,2,2)
contour(xx,yy,zz)
xlabel('pente')
ylabel('oo')
hold on
quiver(xx,yy,px,py)
hold off

Détermination du meilleur ajustement et tracé

Correspond à la valeur minimale de S

best=find(z==min(S));
tt=linspace(min(t),max(t),1000);
L2=r(best,1).*tt+r(best,2);
LL=r(best,1).*t+r(best,2);

Calcul du R2

Basé sur les documents du site http://math.unice.fr/~diener/MpB2009-2010/REG.pdf

DA=sum((L-LL).^2);
DR=sum((LL-mean(L)).^2);
DT=DA+DR;
R2=DR/DT

figure()
plot(t,L,'k*',tt,L2)
xlabel('Temps (jours)')
ylabel('Longueur (cm)')
strg=['fit ' 'pente=' num2str(r(best,1)) '  o.o.=' num2str(r(best,2))];
legend('data', strg)

<!–