Matrix<double> RastriginFunction::calculate_inverse_Hessian(void)
{
   Matrix<double> inverse_Hessian(variables_number, variables_number);

   const double pi = 3.1415927;

   Vector<double> argument = multilayer_perceptron_pointer->get_independent_parameters();

   for(int i = 0; i < variables_number; i++)
   {
      for(int j = 0; j < variables_number; j++)
      {
         if(i == j)
         {
            inverse_Hessian[i][j] = 1.0/(2.0 + 10.0*cos(2.0*pi*argument[i])*4.0*pow(pi,2));
         }
         else
         {
            inverse_Hessian[i][j] = 0.0;
         }
      }
   }

   return(inverse_Hessian);
}
Matrix<double> RastriginFunction::calculate_inverse_Hessian(void) const
{
   const double pi = 3.1415927;

   const unsigned int variables_number = neural_network_pointer->count_parameters_number();
   const Vector<double> argument = neural_network_pointer->arrange_parameters();

   Matrix<double> inverse_Hessian(variables_number, variables_number, 0.0);

   for(unsigned int i = 0; i < variables_number; i++)
   {
      inverse_Hessian[i][i] = 1.0/(2.0 + 10.0*cos(2.0*pi*argument[i])*4.0*pow(pi,2));
   }

   return(inverse_Hessian);
}
Matrix<double> DeJongFunction::calculate_inverse_Hessian(void)
{
   Matrix<double> inverse_Hessian(variables_number, variables_number);

   for(int i = 0; i < variables_number; i++)
   {
      for(int j = 0; j < variables_number; j++)
      {
         if(i == j)
         {
            inverse_Hessian[i][j] = 0.5;
         }
         else
         {
            inverse_Hessian[i][j] = 0.0;
         }
      }
   }

   return(inverse_Hessian);
}