aboutsummaryrefslogtreecommitdiff
path: root/octave/linreg.m
blob: 666b65c64fcc3c5d64789a20b5f8b877a079b360 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
% linreg.m
% David Rowe April 2015
%
% Based on:
%    http://stackoverflow.com/questions/5083465/fast-efficient-least-squares-fit-algorithm-in-c
%
% finds y = mx + b to best fit n points x and y

function [m b] = linreg(x,y,n)
  sumx = 0.0;   % sum of x
  sumx2 = 0.0;  % sum of x^2
  sumxy = 0.0;  % sum of x * y
  sumy = 0.0;   % sum of y
  sumy2 = 0.0;  % sum of y**2

  for i=1:n   
    sumx  += x(i);       
    sumx2 += x(i)^2;  
    sumxy += x(i) * y(i);
    sumy  += y(i);      
    sumy2 += y(i)^2; 
  end 

  denom = (n * sumx2 - sumx*sumx);

  if denom == 0
    % singular matrix. can't solve the problem.
    m = 0;
    b = 0;
  else
    m = (n * sumxy  -  sumx * sumy) / denom;
    b = (sumy * sumx2  -  sumx * sumxy) / denom;
  end

endfunction