public void ScalarFunctonDerivativeTest()
 {
     Func<double, double> f = x => 1 / x;
     var J = new NumericalJacobian();
     var jeval = J.Evaluate(f, 2);
     Assert.AreEqual((double)-1 / 4, jeval[0], 1e-7);
 }
 public void OneEquationVectorFunctionTest()
 {
     Func<double[], double> f = x => Math.Sin(x[0] * x[1]) * Math.Exp(-x[0] / 2) + x[1] / x[0];
     var J = new NumericalJacobian();
     var jeval = J.Evaluate(f, new double[] { 1, 1 });
     Assert.AreEqual(-0.92747906175, jeval[0], 1e-9);
     Assert.AreEqual(1.32770991402, jeval[1], 1e-9);
     Assert.AreEqual(4, J.FunctionEvaluations);
     J.ResetFunctionEvaluations();
     Assert.AreEqual(0, J.FunctionEvaluations);
 }
        public void VectorFunctionJacobianTest()
        {
            Func<double[], double>[] f =
            {
                (x) => Math.Pow(x[0], 2)*x[1],
                (x) => 5*x[0] + Math.Sin(x[1])
            };
            var j = new NumericalJacobian();
            var jeval = j.Evaluate(f, new double[] { 1, 1 });
            Assert.AreEqual(2, jeval[0, 0]);
            Assert.AreEqual(1, jeval[0, 1]);
            Assert.AreEqual(5, jeval[1, 0]);
            Assert.AreEqual(Math.Cos(1), jeval[1, 1], 1e-7);

        }