added optional length parameter to interpolate