% PHYS-AXXXX fysiikan peruskurssien laboratoriotyöt, suoransovituskoodi
% 27.5.2014 Jani Sainio
%
% Funktio laskee pienimmän neliösumman menetelmän (PNS) mukaisen
% pisteistöön parhaiten sopivan suoran kulmakertoimen ja vakiotermin, sekä
% laskee niille virherajat pisteistön hajontaan perustuen. Virherajat ovat
% sovituksessa saatujen parametrien hajontoja eli 68 %:n luottamusrajoja.

% Funktio ajetaan kirjoittamalla komentoriville suora(x,y), 
% jossa x ja y ovat vektorit, jotka sisältävt x- ja y-arvot. Nimeä
% myös tämä tiedosto nimellä suora.m, ellei se sitä jo ole.
% Funktio tulostaa näkyviin seuraavat arvot:
% k = kulmakerroin, dk = kulmakertoimen virhearvio, 
% b = vakiotermi (y-akselin leikkauspiste), db = vakiotermin virhearvio. 

function suora(x,y)     
    
sum_x = sum(x);                     % x-arvojen summa
sum_y = sum(y);                     % y-arvojen summa    
xy = [x.*y];                        % x- ja y-arvot kerrottuna pisteittäin
sum_xy = sum(xy);                   % pisteittäisen tulon summa
N = length(y);                      % mittauspisteiden lukumäärä
x2 = x.^2;                          % x-arvojen neliöt

D = N*sum(x2)-(sum_x)^2;              % apumuuttujan D yhtälö 

k = 1/D *(N*sum_xy-sum_x*sum_y)    % kulmakertoimen k yhtälö 
b = 1/D * (sum(x2)*sum_y-sum_x*sum_xy) % vakiotermin b yhtälö 

dy = y-k*x-b;                       % pisteiden poikkeamat suoralta
sigma2 = 1/(N-2)*sum((dy).^2);      % neliösumma pisteiden poikkeamasta suoralta

dk = sqrt(N*sigma2/D)              % kulmakertoimen virheen yhtälö        
db = sqrt(sigma2/D*sum(x2))        % vakiotermin virheen yhtälö   

end
