public virtual double[] Roots() { var roots = new List <double>(); var p = new Polynomial(1); while (true) { var root = NonlinearEquations.NewtonMethod(new Quotient(this, p), 0); if (root == null) { break; } roots.Add((double)root); p *= new Polynomial(-(double)root, 1); } roots.Sort(); return(roots.ToArray()); }