2011-01-31 2 views
0

То, что я пытаюсь выполнить, состоит в том, чтобы иметь возможность поместить некоторые значения внутри массива, а затем на основе (0-1) получить значение из массива на основе его сохраненные значения.Получить значение из массива с использованием любого заданного значения t

Чтобы сделать это более ясным, вот пример: значения

Array = [0, 10]

Теперь этот массив будет возвращать значение 0 при т = 1 и значение 10 для т = 1. Таким образом, т = 0,3 даст значение 3.

Другой пример:

значения Array = [10, 5, 5, 35]

t=.25 will give a value of 5 
t=.125 will give a value of 7.5 

Im ищет наиболее эффективной формулы для получить значение при любом заданном 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

Возможно есть более элегантная форма, но расчеты будут одинаковыми ... yo u интерполируют, и это то, что вы должны делать ... –

+0

Интерполяция, на самом деле линейная интерполяция - это слово, которое я действительно искал. Я надеялся, что это сделает простой лайнер. –

ответ

0

Вот один вкладыш в математике. Он делает то же, что и вы, только немного более компактный.

Индексы массивов начинаются с 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 

Etc. Если сюжет изменения х масштаб:

Смежные вопросы