예제 #1
0
        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);
            }
        }
예제 #2
0
        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();
        }