public void CentralDifferenceFirstOrderThreePointTest()
 {
     double[] results = { -0.5, 0, 0.5 };
     var finite = new FiniteDifferenceCoefficients(3);
     var coeff = finite.GetCoefficients(1, 1);
     Assert.AreEqual(results, coeff);
 }
        public void CentralDifferenceFirstOrderThreePointTest()
        {
            double[] results = { -0.5, 0, 0.5 };
            var      finite  = new FiniteDifferenceCoefficients(3);
            var      coeff   = finite.GetCoefficients(1, 1);

            Assert.AreEqual(results, coeff);
        }
 public void CentralDifferenceSecondOrderFivePointsTest()
 {
     double[] results = { (double)-1 / 12, (double)4 / 3, (double)-5 / 2, (double)4 / 3, (double)-1 / 12 };
     var finite = new FiniteDifferenceCoefficients(5);
     var coeff = finite.GetCoefficients(2, 2);
     for (int i = 0; i < coeff.Length; i++)
         Assert.AreEqual(results[i], coeff[i]);
 }
 public void BackwardDifferenceThirdOrderFourPointsTest()
 {
     double[] results = { -1, 3, -3, 1 };
     var finite = new FiniteDifferenceCoefficients(4);
     var coeff = finite.GetCoefficients(3, 3);
     for (int i = 0; i < coeff.Length; i++)
         Assert.AreEqual(results[i], coeff[i]);
 }
        /// <summary>
        /// Evaluates the derivative of equidistant points using the finite difference method.
        /// </summary>
        /// <param name="points">Vector of points StepSize apart.</param>
        /// <param name="order">Derivative order.</param>
        /// <param name="stepSize">Finite difference step size.</param>
        /// <returns>Derivative of points of the specified order.</returns>
        public double EvaluateDerivative(double[] points, int order, double stepSize)
        {
            if (points == null)
            {
                throw new ArgumentNullException("points");
            }

            if (order >= _points || order < 0)
            {
                throw new ArgumentOutOfRangeException("order", "Order must be between zero and points-1.");
            }

            var c      = _coefficients.GetCoefficients(Center, order);
            var result = c.Select((t, i) => t * points[i]).Sum();

            result /= Math.Pow(stepSize, order);
            return(result);
        }
 public void ForwardDifferenceThirdOrderEightPointsTest()
 {
     double[] results = { (double)-967 / 120, (double)638 / 15, (double)-3929 / 40, (double)389 / 3,
                          (double)-2545 / 24, (double)268 / 5, (double)-1849 / 120, (double)29 / 15 };
     var finite = new FiniteDifferenceCoefficients(8);
     var coeff = finite.GetCoefficients(0, 3);
     for (int i = 0; i < coeff.Length; i++)
         Assert.AreEqual(results[i], coeff[i]);
 }
        public void BackwardDifferenceThirdOrderFourPointsTest()
        {
            double[] results = { -1, 3, -3, 1 };
            var      finite  = new FiniteDifferenceCoefficients(4);
            var      coeff   = finite.GetCoefficients(3, 3);

            for (int i = 0; i < coeff.Length; i++)
            {
                Assert.AreEqual(results[i], coeff[i]);
            }
        }
        public void CentralDifferenceSecondOrderFivePointsTest()
        {
            double[] results = { (double)-1 / 12, (double)4 / 3, (double)-5 / 2, (double)4 / 3, (double)-1 / 12 };
            var      finite  = new FiniteDifferenceCoefficients(5);
            var      coeff   = finite.GetCoefficients(2, 2);

            for (int i = 0; i < coeff.Length; i++)
            {
                Assert.AreEqual(results[i], coeff[i]);
            }
        }
        public void ForwardDifferenceThirdOrderEightPointsTest()
        {
            double[] results = { (double)-967 / 120, (double)638 / 15, (double)-3929 / 40,  (double)389 / 3,
                                 (double)-2545 / 24, (double)268 / 5,  (double)-1849 / 120, (double)29 / 15 };
            var      finite = new FiniteDifferenceCoefficients(8);
            var      coeff  = finite.GetCoefficients(0, 3);

            for (int i = 0; i < coeff.Length; i++)
            {
                Assert.AreEqual(results[i], coeff[i]);
            }
        }