插入Google脚本中的功能

时间:2017-09-17 19:14:48

标签: google-apps-script google-sheets

我正在使用谷歌工作表记录我的用水量,并希望通过使用线性插值找出我在给定时期内使用了多少。我真的想使用类似于预测的函数,但不要使用整个范围进行插值,只需使用上方和下方的最近点。

我很想尝试自己编写代码(已经完成了大量的VBA),但我们并不知道从哪里开始使用谷歌脚本。有没有人有我的起点?

我将采取的过程是:

Interpolate(x, data_y, data_x)


// Check value is within range of known values (could expand function to use closet two values and extrapolate...)
(is X within XMin and XMax)

// Find closet X value below (X1), corresponding Y1

// Find closet X value above (X2), corresponding Y2

Return Y = Y1+(X-X1)*((Y2-Y1)/(X2-X1))

1 个答案:

答案 0 :(得分:0)

function interpolation(x_range, y_range, x_value) {
  var xValue, yValue, xDiff, yDiff, xInt, index, check = 0;
  if(x_value > Math.max.apply(Math, x_range) || x_value < Math.min.apply(Math, x_range)) {
    throw "value can't be interpolated !!";
    return;
  }
  for(var i = 0, iLen = x_range.length; i < iLen-1; i++) {
    if((x_range[i][0] <= x_value && x_range[i+1][0]> x_value) || (x_range[i][0] >= x_value && x_range[i+1][0] < x_value)){
      yValue = y_range[i][0];
      xDiff = x_range[i+1][0] - x_range[i][0];
      yDiff = y_range[i+1][0] - yValue;
      xInt = x_value - x_range[i][0];
      return (xInt * (yDiff / xDiff)) + yValue;
    }
  }
  return y_range[x_range.length-1][0];
}