Polynomial<T>.fromRoots constructor

Polynomial<T>.fromRoots(
  1. DataType<T> dataType,
  2. List<T> roots, {
  3. PolynomialFormat? format,
})

Builds a polynomial from a list of roots.

Implementation

factory Polynomial.fromRoots(DataType<T> dataType, List<T> roots,
    {PolynomialFormat? format}) {
  final result =
      Polynomial(dataType, desiredDegree: roots.length, format: format);
  if (roots.isEmpty) {
    result.setUnchecked(0, dataType.field.multiplicativeIdentity);
    return result;
  }
  result.setUnchecked(0, dataType.field.neg(roots[0]));
  result.setUnchecked(1, dataType.field.multiplicativeIdentity);
  final sub = dataType.field.sub, mul = dataType.field.mul;
  for (var i = 1; i < roots.length; i++) {
    final root = roots[i];
    for (var j = i + 1; j >= 0; j--) {
      result.setUnchecked(
          j,
          sub(
              j > 0
                  ? result.getUnchecked(j - 1)
                  : dataType.field.additiveIdentity,
              mul(root, result.getUnchecked(j))));
    }
  }
  return result;
}