function NewtonMethod_ponderation

%p est un vecteur de dimension 2x1 contenant les parametres

p(1,1) = 0.8;
p(2,1) = 0.4;


%F = y - (p(1).*t)./(p(2)+t); -> forme de l'equation a minimiser

%dF1 = -t./(p(2)+t);          -> forme de la premiere derivee en p(1)
%dF2 = p(1)*x./((p(2)+t).^2); -> forme de la seconde derivee en p(2)

%donnees experimentales
t = [0.038 ; 0.194 ; 0.425 ; 0.626 ; 1.253 ; 2.500 ; 3.740];
D = [0.050 ; 0.127 ; 0.094 ; 0.2122 ; 0.2729 ; 0.2665 ; 0.3317];

%ponderation
weight = [0.03 0.05 0.03 0.04 0.03 0.03 0.06];
w = eye(length(t));
w(w~=0) = 1./(weight.^2);

%il y aura 5 iterations
for inc = 1:5
    
    %calcul du Jacobien
    J(1:length(t),1) = -t./(p(2)+t);
    J(1:length(t),2) = p(1)*t./((p(2)+t).^2);
    
    %calcul des residus
    F = D-(p(1).*t)./(p(2)+t);
    %calcul de la variance
    variance2 = sum(((F.^2).')./(weight.^2))./(length(t)-length(p));
    %calul de la matrice de ponderation
    w = variance2*w;
    %il y a plusieurs maniere de calculer l'incrementation Delta
    Delta = -inv(J.'*w*J)*(J.'*w*F);
    
    %incrementation des parametres
    p = p+Delta;
    %retour à la matrice de ponderation
    w = w/variance2;
    
end

%calculation de la rmse
rmse = (sum(F.^2)/length(F))^0.5;

%calcul de la rmse ponderee
rmsew = (sum(diag(w).*(F.^2))/sum(diag(w)))^0.5;

%calculation de l'ecart type (standard deviation)
stdv = (sum(F.^2)/(length(F)-length(p)))^0.5;

%evalutation des donnees ajustees
ta = 0:0.01:4;
Da = (p(1).*ta)./(p(2)+ta);

%affichage des resultats
fprintf('\nB1 = %f\nB2 = %f\n\n',p);
fprintf('rmse = %f\n',rmse);
fprintf('rmsew = %f\n',rmsew);
fprintf('stdv = %f\n\n',stdv);

%affichage du graphique
figure

h = plot(t, D, 'or', ta, Da, 'b');

legend(h, {'Donnees experimentales' 'Meilleur ajustement'}, 'location', 'southeast')

title({'Ajustement avec la methode de Gauss-Newton' 'et ponderation des donnees'});
xlabel('t');
ylabel('Donnes a ajuster');