load upf_cv11_linear.txt;   % nacti soubor (radky  a sloupce -> matice)

x = upf_cv11_linear(:,1);       % prvni sloupec -> sloupcovy vektor x
y = upf_cv11_linear(:,2);       % ...
N = length(x);                  % ...

scatter(x,y);   % vykresli bodovy graf
hold on;    % pri dalsim kresleni nesmazavej co uz je nakresleno

%------------------------------------------------------------------------
% fituj modelem y = b1 * x
b1 = x \ y;     % operator 'mldivide' provadi deleni matic zleva
                % tj. nachazi matici b1, pro kterou plati y = x * b1.
                % Pokud to  nelze udelat (protoze x neni ctvercova)
                % minimalizuje chi^2
disp("b1 = " + b1);       % vypis b1 do command window

yModel1 = x * b1;    % spocitej hodnoty y predpovezene modelem
plot(x,yModel1);     % vykresli modelovu predpoved do grafu jako caru

%------------------------------------------------------------------------
% fituj modelem y = a2 + b2 * x
X = [ones(N,1), x];   % vytvor matici 2 x N, kde i-ty radek je [1, x_i]
% ted muzeme napsat modelovou rovnici jako y = B2 * X, kde B2 = [a2, b2]
B2 = X \ y;     % najdi reseni s nejmensim ctvercem odchylek...
%B2 = polyfit(x,y,1);    % nebo pouzij polyfit(x,y,degree)
disp("a2 = " + B2(1) + " b2 = " + B2(2));
yModel2 = X * B2;
plot(x,yModel2);

%--------------------------------------------------------------------------
xlabel("x");
ylabel("y");
title("Příklad lineární regrese")
legend("y_i","y = b_1x","y = a_2 + b_2x","Location","southeast");
hold off;   % obrazek je hotovy, uz ho muzes necim prepsat
