public void TestDifferentiate() { MathFunction f = Math.Exp; MathFunction Df = Math.Exp; Assert.Equal(Df(-5), NumericalTools.Differentiate(f)(-5), 2); Assert.Equal(Df(-1), NumericalTools.Differentiate(f)(-1), 2); Assert.Equal(Df(0), NumericalTools.Differentiate(f)(0), 2); Assert.Equal(Df(1), NumericalTools.Differentiate(f)(1), 2); Assert.Equal(Df(5), NumericalTools.Differentiate(f)(5), 2); f = Math.Sin; Df = Math.Cos; Assert.Equal(Df(-5), NumericalTools.Differentiate(f)(-5), 2); Assert.Equal(Df(-1), NumericalTools.Differentiate(f)(-1), 2); Assert.Equal(Df(0), NumericalTools.Differentiate(f)(0), 2); Assert.Equal(Df(1), NumericalTools.Differentiate(f)(1), 2); Assert.Equal(Df(5), NumericalTools.Differentiate(f)(5), 2); f = x => Math.Pow(x, 3); Df = x => 3 * Math.Pow(x, 2); Assert.Equal(Df(-5), NumericalTools.Differentiate(f)(-5), 2); Assert.Equal(Df(-1), NumericalTools.Differentiate(f)(-1), 2); Assert.Equal(Df(0), NumericalTools.Differentiate(f)(0), 2); Assert.Equal(Df(1), NumericalTools.Differentiate(f)(1), 2); Assert.Equal(Df(5), NumericalTools.Differentiate(f)(5), 2); }