final int nData0 = x0Values.length;
final int nData1 = x1Values.length;
DoubleMatrix2D yValuesMatrix = new DoubleMatrix2D(yValues);
final PiecewisePolynomialFunction1D func = new PiecewisePolynomialFunction1D();
double[][] diff0 = new double[nData1][nData0];
double[][] diff1 = new double[nData0][nData1];
double[][] cross = new double[nData0][nData1];
final PiecewisePolynomialResult result0 = _method[0].interpolate(x0Values, OG_ALGEBRA.getTranspose(yValuesMatrix).getData());
diff0 = func.differentiate(result0, x0Values).getData();
final PiecewisePolynomialResult result1 = _method[1].interpolate(x1Values, yValuesMatrix.getData());
diff1 = func.differentiate(result1, x1Values).getData();
final int order = 4;
for (int i = 0; i < nData0; ++i) {
for (int j = 0; j < nData1; ++j) {