void NumericalDifferentiationTest::test_calculate_Jacobian(void) { message += "test_calculate_Jacobian\n"; NumericalDifferentiation nd; Vector<double> x; Matrix<double> J; Matrix<double> J_true; // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::ForwardDifferences); x.set(2, 0.0); J = nd.calculate_central_differences_Jacobian(*this, &NumericalDifferentiationTest::f3, x); J_true.set_identity(2); assert_true(J == J_true, LOG); // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::CentralDifferences); x.set(2, 0.0); J = nd.calculate_central_differences_Jacobian(*this, &NumericalDifferentiationTest::f3, x); J_true.set_identity(2); assert_true(J == J_true, LOG); }
void NumericalDifferentiationTest::test_calculate_Hessian(void) { message += "test_calculate_Hessian\n"; NumericalDifferentiation nd; Vector<double> x; Matrix<double> H; // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::ForwardDifferences); x.set(2, 0.0); H = nd.calculate_Hessian(*this, &NumericalDifferentiationTest::f2, x); assert_true(H.get_rows_number() == 2, LOG); assert_true(H.get_columns_number() == 2, LOG); assert_true(H == 0.0, LOG); // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::CentralDifferences); x.set(2, 0.0); H = nd.calculate_Hessian(*this, &NumericalDifferentiationTest::f2, x); assert_true(H.get_rows_number() == 2, LOG); assert_true(H.get_columns_number() == 2, LOG); assert_true(H == 0.0, LOG); }
void NumericalDifferentiationTest::test_calculate_second_derivative(void) { message += "test_calculate_second_derivative\n"; NumericalDifferentiation nd; double x; double d2; // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::ForwardDifferences); x = 0.0; d2 = nd.calculate_second_derivative(*this, &NumericalDifferentiationTest::f1, x); assert_true(fabs(d2) <= 1.0e-6, LOG); // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::CentralDifferences); x = 0.0; d2 = nd.calculate_second_derivative(*this, &NumericalDifferentiationTest::f1, x); assert_true(fabs(d2) <= 1.0e-6, LOG); }
void NumericalDifferentiationTest::test_calculate_gradient(void) { message += "test_calculate_gradient\n"; NumericalDifferentiation nd; Vector<double> x; Vector<double> g; // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::ForwardDifferences); x.set(2, 0.0); g = nd.calculate_gradient(*this, &NumericalDifferentiationTest::f2, x); assert_true(g.size() == 2, LOG); assert_true(g == 1.0, LOG); // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::CentralDifferences); x.set(2, 0.0); g = nd.calculate_gradient(*this, &NumericalDifferentiationTest::f2, x); assert_true(g.size() == 2, LOG); assert_true(g == 1.0, LOG); }
void NumericalDifferentiationTest::test_calculate_derivative(void) { message += "test_calculate_derivative\n"; NumericalDifferentiation nd; // double x; double d; // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::ForwardDifferences); // x = 0.0; d = nd.calculate_derivative(*this, &NumericalDifferentiationTest::f1, 0.0); assert_true(d == 1.0, LOG); // Test nd.set_numerical_differentiation_method(NumericalDifferentiation::CentralDifferences); // x = 0.0; d = nd.calculate_derivative(*this, &NumericalDifferentiationTest::f1, 0.0); assert_true(d == 1.0, LOG); }