在Google脚本中插值功能



我正在使用Google表来记录我的用水量,并想通过使用线性插值来了解我在给定期间使用了多少。我真的很想使用类似于预测的函数,但是不要使用整个范围插值,而只需在上方和下方使用最近的点即可。

我很想尝试自己编码(做了很多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))
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];
}

使用Xlookup函数在当天左右插入两个数据点。

在a中的日期:

  • e2 =xlookup(D2,A:A,B:B,NA(),-1)-用法
  • f2 =xlookup(D2,A:A,B:B,NA(),1)-
  • 之后用法
  • G2 =xlookup(D2,A:A,A:A,,-1)-日期
  • H2 =xlookup(D2,A:A,A:A,,1)-日期
  • 之后
  • =E2+(F2-E2)*((D2-G2)/max(1,H2-G2))插值值(最大防止划分为零)

然后将其合并为一个公式以避免额外的列:

=xlookup(D2,A:A,B:B,NA(),-1)+(xlookup(D2,A:A,B:B,NA(),1)-xlookup(D2,A:A,B:B,NA(),-1))*((D2-xlookup(D2,A:A,A:A,,-1))/max(1,xlookup(D2,A:A,A:A,,1)-xlookup(D2,A:A,A:A,,-1)))

最新更新