我有一个包含数据的数组:
X Y
3 50
5 60
9 120
11 130
18 90
20 150数据完全是非线性的。X被保证被排序。
对于任何给定的值,我希望在数字之间进行线性插值(例如,3 => 50,4 => 55,5 => 60)。双线性插值会更好,但我的期望很低。
发布于 2017-12-29 06:17:46
这是对雅各布·扬·图因斯特拉的剧本的一个小修改,允许它将数组或值作为第三个参数,以便可以在多个地方同时计算插值函数。唯一的区别是在开头添加了几行;这是将几乎所有自定义函数转换为接受数组的自定义函数的一种快速方法。
function myInterpolation(x, y, value) {
if (value.map) {
return value.map(function(v) {
return myInterpolation(x, y, v);
});
}
// the rest stays the same
if (value > Math.max.apply(Math, x) || value < Math.min.apply(Math, x)) {
throw "value can't be interpolated !!";
return;
}
var check = 0, index;
for(var i = 0, iLen = x.length; i < iLen; i++) {
if(x[i][0] == value) {
return y[i][0];
} else {
if(x[i][0] < value && ((x[i][0] - check) < (value - check))) {
check = x[i][0];
index = i;
}
}
}
var xValue, yValue, xDiff, yDiff, xInt;
yValue = y[index][0];
xDiff = x[index+1][0] - check;
yDiff = y[index+1][0] - yValue;
xInt = value - check;
return (xInt * (yDiff / xDiff)) + yValue;
}发布于 2021-10-08 12:45:34
你为什么不试试插值AddOn呢?也许会有帮助。
https://workspace.google.com/u/0/marketplace/app/interpolation/47482038900
各种问候
https://webapps.stackexchange.com/questions/63165
复制相似问题