public void QuadraticExpected(double c, double b, double a, double x1R, double x1I, double x2R, double x2I) { // c + b*x + a*x^2 var x = FindRoots.Quadratic(c, b, a); Complex x1 = x.Item1, x2 = x.Item2; // Expected roots? Complex r1 = new Complex(x1R, x1I), r2 = new Complex(x2R, x2I); Assert.IsTrue(x1.AlmostEqualRelative(r1, 1e-14) && x2.AlmostEqualRelative(r2, 1e-14) || x1.AlmostEqualRelative(r2, 1e-14) && x2.AlmostEqualRelative(r1, 1e-14)); // Verify they really are roots AssertComplexEqual(Complex.Zero, c + b * x1 + a * x1 * x1, 1e-14); AssertComplexEqual(Complex.Zero, c + b * x2 + a * x2 * x2, 1e-14); }
public void QuadraticExpanded(double u, double v, double t) { // t*(x+u)*(x+v) = t*u*v + t*(u+v)*x + t*x^2 double c = t * u * v, b = t * (u + v), a = t; var x = FindRoots.Quadratic(c, b, a); Complex x1 = x.Item1, x2 = x.Item2; // Expected Roots: -u, -v Complex r1 = new Complex(-u, 0d), r2 = new Complex(-v, 0d); Assert.IsTrue(x1.AlmostEqualRelative(r1, 1e-14) && x2.AlmostEqualRelative(r2, 1e-14) || x1.AlmostEqualRelative(r2, 1e-14) && x2.AlmostEqualRelative(r1, 1e-14)); // Verify they really are roots AssertComplexEqual(Complex.Zero, c + b * x1 + a * x1 * x1, 1e-14); AssertComplexEqual(Complex.Zero, c + b * x2 + a * x2 * x2, 1e-14); }