double ReturnedCost = Func.valueAt(x);
double[] ReturnedGradient = Func.derivativeAt(x);
double[] NumericalGradient = new double[size];
double PartCosts;
double Mean = 2e-6 * ((1 + xMat.norm2()) / p);
for (int i = 0; i < size; i++) {
double[] e = DoubleMatrix.zeros(size).data;
e[i] = 1;
DoubleArrays.scale(e, Mean);
double[] y = DoubleArrays.add(x, e);