analc_endsversion/FittingAndMath/fit_linear.m

46 lines
928 B
Mathematica
Raw Permalink Normal View History

2022-04-11 13:28:22 +00:00
function [a,b,da,db]=fit_linear(x,y,varargin)
%fit_linear: 1st order linear regression.
%This function fits a dataset of x and y values to the linear equation
%y=ax+b. it is optional for the user to insert also y error values for the
%estimation of a and b errors.
%
%Yair Judkovsky, 21.8.2013
if nargin==2 %case of no error input - assuming that all errors are equal
dy = ones(size(y));
else
dy = varargin{1};
end
dy2=dy.^2;
x2=x.^2;
xy=x.*y;
S=sum(1./dy2);
Sx=sum(x./dy2);
Sy=sum(y./dy2);
Sxx=sum(x2./dy2);
Sxy=sum(xy./dy2);
D=S*Sxx-Sx^2;
a=(S*Sxy-Sx*Sy)/D;
b=(Sxx*Sy-Sxy*Sx)/D;
if nargin==2 %no error given - need to estimate it
Ytheo=a*x+b;
dy2=mean((Ytheo-y).^2)*ones(size(y));
S=sum(1./dy2);
Sx=sum(x./dy2);
Sxx=sum(x2./dy2);
D=S*Sxx-Sx^2;
da=sqrt(S/D);
db=sqrt(Sxx/D);
else
da=sqrt(S/D);
db=sqrt(Sxx/D);
end
return