/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.math.impl.rootfinding; import static org.testng.AssertJUnit.assertEquals; import java.util.Arrays; import org.apache.commons.math3.random.Well44497b; import org.testng.annotations.Test; import com.opengamma.strata.math.impl.function.RealPolynomialFunction1D; /** * Test. */ @Test public class EigenvaluePolynomialRootFinderTest { private static final Well44497b RANDOM = new Well44497b(0L); private static final Polynomial1DRootFinder<Double> FINDER = new EigenvaluePolynomialRootFinder(); @Test(expectedExceptions = IllegalArgumentException.class) public void testNull() { FINDER.getRoots(null); } @Test public void test() { final double[] r = new double[] {-RANDOM.nextDouble(), -RANDOM.nextDouble(), RANDOM.nextDouble(), RANDOM.nextDouble() }; final double a0 = r[0] * r[1] * r[2] * r[3]; final double a1 = r[0] * r[1] * r[2] + r[0] * r[1] * r[3] + r[0] * r[2] * r[3] + r[1] * r[2] * r[3]; final double a2 = r[0] * r[1] + r[0] * r[2] + r[0] * r[3] + r[1] * r[2] + r[1] * r[3] + r[2] * r[3]; final double a3 = r[0] + r[1] + r[2] + r[3]; final double a4 = 1; final RealPolynomialFunction1D f = new RealPolynomialFunction1D(new double[] {a0, a1, a2, a3, a4 }); final Double[] roots = FINDER.getRoots(f); Arrays.sort(roots); final double[] expected = new double[r.length]; for (int i = 0; i < r.length; i++) { expected[i] = -r[i]; } Arrays.sort(expected); for (int i = 0; i < roots.length; i++) { assertEquals(roots[i], expected[i], 1e-12); } } }