使用任何给定的t从数组中获取值

时间:2011-01-31 23:27:13

标签: math

我想要完成的是,能够在数组中放入一些值,然后基于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;

但我确信有更好的方法可以做到这一点。所以我在这里呼吁数学家!

1 个答案:

答案 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刻度:

enter image description here