/// <summary>
        /// Interpolate.
        /// </summary>
        /// <param name="xValues">  the values </param>
        /// <param name="yValuesMatrix">  the matrix </param>
        /// <param name="xMatrix">  the matrix </param>
        /// <returns> Values of the underlying cubic spline functions interpolating {yValuesMatrix.RowVectors} at the values of xMatrix </returns>
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: public com.opengamma.strata.collect.array.DoubleMatrix[] interpolate(final double[] xValues, final double[][] yValuesMatrix, final double[][] xMatrix)
        public virtual DoubleMatrix[] interpolate(double[] xValues, double[][] yValuesMatrix, double[][] xMatrix)
        {
            ArgChecker.notNull(xMatrix, "xMatrix");

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int keyColumn = xMatrix[0].length;
            int keyColumn = xMatrix[0].Length;

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.opengamma.strata.collect.array.DoubleMatrix matrix = com.opengamma.strata.collect.array.DoubleMatrix.copyOf(xMatrix);
            DoubleMatrix matrix = DoubleMatrix.copyOf(xMatrix);

            DoubleMatrix[] resMatrix2D = new DoubleMatrix[keyColumn];

            for (int i = 0; i < keyColumn; ++i)
            {
                resMatrix2D[i] = interpolate(xValues, yValuesMatrix, matrix.columnArray(i));
            }

            return(resMatrix2D);
        }