function [a, b,deltaa,deltab,chi2]=fit_min_chiquadro(x,y,sigmay);
% effettua il fit di una retta col metodo dei minimi quadrati
% y= ax + b
% Calcola anche l'errore su a e b.

% pongo a e b uguale a zero....
a=0;
b=0;
% dapprima controlliamo che x, y e sigmay abbiano la stessa lunghezza.....
% altrimenti pone a e b uguali a zero.
if ((length(x)~=length(y))|(length(x)~=length(sigmay))) 
   return
end

s2=sigmay.*sigmay;
%calcola la somma di x 
sx=sum(x./s2);
% calcola la somma di y
sy=sum(y./s2);
% calcola la somma di x^2
sx2=sum(x.*x./s2);
sxy=sum(x.*y./s2);
s1=sum(1./s2);
% crea la matrice
M=[sx2 sx ; sx s1];
% crea il vettore 
v=[sxy ; sy];
% controlla il rango di M
if (rank(M)<2)
      return
   end
   
   Minv=inv(M);
   soluzione=Minv*v;
   a=soluzione(1);
   b=soluzione(2);
   deltaa=sqrt(Minv(1,1));
   deltab=sqrt(Minv(2,2));
   residuo=(y-a*x-b);
   residuonorm=residuo./sigmay;
   chi2=sum(residuonorm.*residuonorm);
   return
