public void Test_FindRoots_EstimatedPoly() { int n = 8; float[] x = new float[] { -1.2f, 1.2f, 1.4f, 1.6f, 1.8f, 2.2f, -1.6f, -1.4f }; Matrix<float> estimationMatrix = new MathNet.Numerics.LinearAlgebra.Single.DenseMatrix(n, 2); for(int r = 0; r < n; ++r) { estimationMatrix.At(r, 0, x[r]); estimationMatrix.At(r, 1, (float)PolyValue(x[r])); } Polynomial poly = Polynomial.EstimatePolynomial(estimationMatrix, rank); PolynomialRootFinder rootFinder = new PolynomialRootFinder(); rootFinder.Poly = poly; rootFinder.Process(); var roots = rootFinder.RealRoots; Assert.IsTrue(roots.Count == rank); Array.Sort(_r); roots.Sort(); for(int i = 0; i < rank; ++i) { Assert.IsTrue( Math.Abs(roots[i] / _r[i] - 1.0f) < 1e-4f || Math.Abs(roots[i] - _r[i]) < 1e-4f); } }
private void Form1_Load(object sender, EventArgs e) { double[] coefficients = new double[5]; int degree = 3; double[] real_zero_vector_ptr = new double[4]; double[] imaginary_zero_vector_ptr = new double[4]; int number_of_roots_found_ptr; PolynomialRootFinder finder = new PolynomialRootFinder(); // Highest degree , highest index double alpha = 0; double beta = 0.3; double gamma = 0.3; coefficients[3] = 1.0; coefficients[2] = -alpha; coefficients[1] = -(beta + gamma); coefficients[0] = gamma; PolynomialRootFinder.RootStatus status = finder.FindRoots(coefficients, degree, real_zero_vector_ptr, imaginary_zero_vector_ptr, out number_of_roots_found_ptr); for (int i = 0; i < degree; i++) { Console.WriteLine("{0} {1}", real_zero_vector_ptr[i], imaginary_zero_vector_ptr[i]); } Close(); }