public void ScalarFunctonSecondDerivativeTest() { // d2/dx2((2x)^2) = 8 Func<double, double> f = x => Math.Pow(2 * x, 2); var J = new NumericalHessian(); var jeval = J.Evaluate(f, 2); Assert.AreEqual((double)8, jeval[0], 1e-7); }
public void ScalarFunctonSecondDerivativeTest() { // d2/dx2((2x)^2) = 8 Func <double, double> f = x => Math.Pow(2 * x, 2); var J = new NumericalHessian(); var jeval = J.Evaluate(f, 2); Assert.AreEqual(8.0, jeval[0], 1e-7); }
public void OneEquationTwoVarVectorFunctionTest() { Func<double[], double> f = x => 4 * Math.Pow(x[0], 2) + 3 * Math.Pow(x[1], 3); var H = new NumericalHessian(); var heval = H.Evaluate(f, new double[] { 1, 1 }); var solution = new double[,] { { 8, 0 }, { 0, 18 } }; Assert.AreEqual(solution, heval); Assert.AreEqual(12, H.FunctionEvaluations); H.ResetFunctionEvaluations(); Assert.AreEqual(0, H.FunctionEvaluations); }
public void OneEquationTwoVarVectorFunctionTest() { Func <double[], double> f = x => 4 * Math.Pow(x[0], 2) + 3 * Math.Pow(x[1], 3); var H = new NumericalHessian(); var heval = H.Evaluate(f, new double[] { 1, 1 }); var solution = new double[, ] { { 8, 0 }, { 0, 18 } }; Assert.AreEqual(solution, heval); Assert.AreEqual(12, H.FunctionEvaluations); H.ResetFunctionEvaluations(); Assert.AreEqual(0, H.FunctionEvaluations); }
public void RosenbrockFunctionHessianTest() { Func<double[], double> f = x => Math.Pow((1 - x[0]), 2) + 100 * Math.Pow(x[1] - Math.Pow(x[0], 2), 2); var H = new NumericalHessian(5, 2); var heval = H.Evaluate(f, new double[] { 2, 3 }); var solution = new double[,] { { 3602, -800 }, { -800, 200 } }; for (int row = 0; row < solution.Rank; row++) { for (int col = 0; col < solution.Rank; col++) { Assert.AreEqual(solution[row, col], heval[row, col], 1e-7); } } }
public void RosenbrockFunctionHessianTest() { Func <double[], double> f = x => Math.Pow((1 - x[0]), 2) + 100 * Math.Pow(x[1] - Math.Pow(x[0], 2), 2); var H = new NumericalHessian(5, 2); var heval = H.Evaluate(f, new double[] { 2, 3 }); var solution = new double[, ] { { 3602, -800 }, { -800, 200 } }; for (int row = 0; row < solution.Rank; row++) { for (int col = 0; col < solution.Rank; col++) { Assert.AreEqual(solution[row, col], heval[row, col], 1e-7); } } }