* scm/beam.scm (check-slope-callbacks): check sign of slope.
[lilypond.git] / lily / least-squares.cc
blobbcb2cb1a9b55336df1c6cde2bf96075ca671bbe6
1 /*
2 least-squares.cc -- implement minimise_least_squares
4 source file of the GNU LilyPond music typesetter
6 (c) 1996--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 */
10 #include "least-squares.hh"
11 #include "warn.hh"
14 void
15 minimise_least_squares (Real * coef, Real * offset,
16 Array<Offset> const &input)
18 Real sx = 0.0;
19 Real sy = 0.0;
20 Real sqx =0.0;
21 Real sxy = 0.0;
23 for (int i=0; i < input.size ();i++)
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;
32 int N = input.size ();
34 *coef =0.0;
35 *offset =0.;
37 Real den = (N*sqx - sqr (sx));
38 if (!N || !den)
40 programming_error ("minimise_least_squares (): Nothing to minimise");
41 *coef = 0.0;
42 *offset = N ? sy/N : 0.0;
44 else
46 *coef = (N * sxy - sx*sy)/den;
47 *offset = (sy - (*coef) * sx)/N;