quadratic function

({double a, double b, double c}) quadratic(
  1. List<DataPoint> p
)

Fits y = ax^2 + bx + c to sample data.

Returns (a, b, c) coefficients of the best fit quadratic.

Implementation

({double a, double b, double c}) quadratic(List<DataPoint> p) {
  var pSum = 0.0, q = 0.0, r = 0.0, s = 0.0;
  var t = 0.0, u = 0.0, v = 0.0;
  for (final pt in p) {
    final x = pt.x;
    final y = pt.y;
    final x2 = x * x;
    pSum += x;
    q += x2;
    r += x * x2;
    s += x2 * x2;
    t += y;
    u += x * y;
    v += x2 * y;
  }
  final n = p.length.toDouble();
  final d = n * q * s + 2 * pSum * q * r -
      q * q * q - pSum * pSum * s - n * r * r;
  return (
    a: (n * q * v + pSum * r * t + pSum * q * u -
            q * q * t - pSum * pSum * v - n * r * u) / d,
    b: (n * s * u + pSum * q * v + q * r * t -
            q * q * u - pSum * s * t - n * r * v) / d,
    c: (q * s * t + q * r * u + pSum * r * v -
            q * q * v - pSum * s * u - r * r * t) / d,
  );
}