%linearni regrese
load data.dat %nacteni datoveho souboru
%1. sloupec x
%2. sloupec y
%3. slopuec err-y (st dev.)
x=data(:,1);
y=data(:,2);
sigma=data(:,3);
n=size(data,1);
fprintf(1,'pocet dat:%d\n',n);
errorbar(x,y,sigma,'x');
hold on;
%%vytvoreni kovariancni matice C
C=eye(n).*sigma.^2;
%% obecna primka y=pars1+x*pars2 = X*pars
% vytvoreni matice X
X=[ones(n,1),x];
% matice A pro prevod y na optimalizovane parametry primky
A=inv(X'*inv(C)*X)*X'*inv(C);
pars=A*y; % optimalni parametry
parscov=A*C*A'; %kovariancni matice parametru
%% vypis nafitovanych parametru a nakresleni prolozene zavislosti
sigma_b=sqrt(parscov(1,1));
sigma_a=sqrt(parscov(2,2));
rho_ab=parscov(1,2)/(sigma_a*sigma_b); %korelacni koeficient

fprintf(1,'\n');
fprintf(1,'obecna primka y=a*x+b\n');
fprintf(1,'b=%f +/- %f\n',pars(1),sigma_b);
fprintf(1,'a=%f +/- %f\n',pars(2),sigma_a);
fprintf(1,'rho(a,b)=%f\n',rho_ab);

plot(x,X*pars,'r');title('y=ax+b');
