]> git.donarmstrong.com Git - lilypond.git/blob - lily/least-squares.cc
patch::: 1.3.78.jcn1
[lilypond.git] / lily / least-squares.cc
1 /*   
2   least-squares.cc --  implement minimise_least_squares
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "least-squares.hh"
11 #include "warn.hh"
12
13
14 void
15 minimise_least_squares (Real * coef, Real * offset,
16                         Array<Offset> input)
17 {
18   Real sx = 0.0;
19   Real sy = 0.0;
20   Real sqx =0.0;
21   Real sxy = 0.0;
22
23   for (int i=0; i < input.size();i++) 
24     {
25       Real x=input[i][X_AXIS];
26       Real y = input[i][Y_AXIS];
27       sx += x;
28       sy += y;
29       sqx += sqr (x);
30       sxy += x*y;
31     }
32   int N = input.size();
33
34   *coef =0.0;
35   *offset =0.;
36   
37   Real den = (N*sqx - sqr (sx));
38   if (!N || !den)
39     {
40       programming_error ("minimise_least_squares():  Nothing to minimise");
41       *coef = 0.0;
42       *offset = N ? sy/N : 0.0;
43     }
44   else
45     {
46       *coef = (N * sxy - sx*sy)/den;
47       *offset = (sy - (*coef) * sx)/N;
48     }
49 }
50