我想要完成的是,能够在数组中放入一些值,然后基于t(0-1),根据存储的值从数组中获取一个值。
为了更清楚,这是一个例子:
数组值= [0,10]
现在,对于t = 1,此数组将返回值0,对于t = 1,此值将返回值10。所以t = .3的值为3。
另一个例子:
数组值= [10,5,5,35]
t=.25 will give a value of 5
t=.125 will give a value of 7.5
我正在寻找最有效的公式,以使用给定的数组获得任何给定t的值。
目前我正在使用此(伪代码)
var t:Number = .25;
var values:Array = [10, 5, 5, 35];
if(t == 1) value = [values.length-1];
else
var offset:Number = 1/values.length;
var startIndex:int = int(t/offset);
var fraction:Number = t % offset;
var roundPart:Number = (values[startIndex+1] - values[startIndex]) * fraction;
var value:Number = values[startIndex] + roundPart;
但我确信有更好的方法可以做到这一点。所以我在这里呼吁数学家!
答案 0 :(得分:0)
这是Mathematica中的One Liner。它正在做同样的事情,只是稍微紧凑一点。
数组索引从1开始。
values = {10, 5, 5, 35, 0}
f[a_, x_] := a[[k = IntegerPart[(k1 = (Dimensions[a][[1]] - 2) x)] + 1]] +
FractionalPart[k1] (a[[k + 1]] - a[[k]])
所以你的插值结果是:
In[198]:= f[values,1]
Out[198]= 35
等。 如果你改变x刻度: