class function
{
public:
template <typename T>
virtual T operator()(const array1d<T>& x, array1d<T>& g)const=0;
virtual ::std::string functionName()const { return "f(x)"; }
virtual ::std::string gradientName()const { return "f'(x)"; }
};