Browse Source

Wrote tests for "GetRoots" method

ridge-regression
Tobias Glaubach 8 years ago
parent
commit
8e86f10c32
  1. 61
      src/Numerics.Tests/PolynomialTests.cs

61
src/Numerics.Tests/PolynomialTests.cs

@ -28,7 +28,9 @@
// </copyright> // </copyright>
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Numerics;
using MathNet.Numerics; using MathNet.Numerics;
using MathNet.Numerics.LinearRegression; using MathNet.Numerics.LinearRegression;
using MathNet.Numerics.Statistics; using MathNet.Numerics.Statistics;
@ -205,6 +207,63 @@ namespace MathNet.Numerics.UnitTests
} }
} }
} }
[Test]
public void GetRootsTest()
{
var tol = 1e-14;
var p1 = new Polynomial(1.0);
var r = p1.GetRoots();
Assert.AreEqual(1, r.Length, "length mismatch");
Assert.AreEqual(1.0, r.FirstOrDefault().Real);
var p2 = new Polynomial(new double[] { 1, 2 });
var r2 = p2.GetRoots();
Assert.AreEqual(1, r2.Length, "length mismatch");
Assert.AreEqual(-0.5, r2.FirstOrDefault().Real, tol);
// T.G: the following expected values were generated using
// numpys np.roots(x) method
// which is equivalent to np.polynomial.polynomial.polyroots
var x_2 = new double[] { -1.0, 1.0 };
var expected_2 = new List<Complex>();
expected_2.Add(new Complex(1.0, 0.0));
testEqual(x_2, expected_2);
var x_3 = new double[] { -1.0, 0.0, 1.0 };
var expected_3 = new List<Complex>();
expected_3.Add(new Complex(1.0, 0.0));
expected_3.Add(new Complex(-1.0, 0.0));
testEqual(x_3, expected_3);
var x_4 = new double[] { -1.0, -0.33333333333333337, 0.33333333333333326, 1.0 };
var expected_4 = new List<Complex>();
expected_4.Add(new Complex(0.9999999999999996, 0.0));
expected_4.Add(new Complex(-0.6666666666666666, 0.7453559924999296));
expected_4.Add(new Complex(-0.6666666666666666, -0.7453559924999296));
testEqual(x_4, expected_4);
}
private void testEqual(double[] x, List<Complex> eIn)
{
var tol = 1e-10;
var r0 = new Polynomial(x).GetRoots().ToList();
var e = eIn.OrderBy(v => v.Real).ToArray();
var r = r0.OrderBy(v => v.Real).ToArray();
Assert.IsNotNull(r);
Assert.AreEqual(e.Length, r.Length, "length mismatch");
for (int k = 0; k < r.Length; k++)
{
var msg = String.Format("At k={0}", k);
Assert.AreEqual(e[k].Real, r[k].Real, tol, msg);
Assert.AreEqual(e[k].Imaginary, r[k].Imaginary, tol, msg);
}
}
} }
} }

Loading…
Cancel
Save