public static double NewtonRaphsonMethod(double[] polynomial, double a, double b, double epsilon, int maxIteration) { int i = 0; var derivative = Derivative(polynomial); double f0 = Poly.Evaluate(polynomial, a); double x = a; while (Math.Abs(Poly.Evaluate(polynomial, x)) > epsilon) { x -= f0 / Poly.Evaluate(derivative, x); f0 = Poly.Evaluate(polynomial, x); i++; if (i >= maxIteration) { return(double.NaN); } } return(x); }
public static double BisectionMethod(double[] polynomial, double a, double b, double epsilon) { double x1 = a; double x2 = b; double fb = Poly.Evaluate(polynomial, b); while (Math.Abs(x2 - x1) > epsilon) { double midpt = 0.5 * (x1 + x2); if (fb * Poly.Evaluate(polynomial, midpt) > 0) { x2 = midpt; } else { x1 = midpt; } } return(x2 - (x2 - x1) * Poly.Evaluate(polynomial, x2) / (Poly.Evaluate(polynomial, x2) - Poly.Evaluate(polynomial, x1))); }