Интерполяция по массиву (или два)

В Вашем случае это произведет ошибку.:-)

Set присваивает ссылку на объект. Для всех других присвоений (неявный, дополнительный, и мало-используемый) Let оператор корректен:

Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)
8
задан Robert 3 August 2009 в 16:37
поделиться

3 ответа

Другие ответы дают вам линейную интерполяцию - она ​​не работает для сложных нелинейных данных. Вам нужна сплайновая аппроксимация , (сплайн-интерполяция), я полагаю.

Сплайновая аппроксимация описывает области данных с использованием набора контрольных точек из данных, а затем применяет полиномиальную интерполяцию между контрольными точками . Больше контрольных точек дает более точную подгонку, чем более общую. Сплайны намного точнее, чем линейные подгонки, быстрее в использовании, чем подгонка общей регрессией, лучше, чем полином высокого порядка, потому что он не будет делать сумасшедших вещей между контрольными точками.

Я не могу вспомнить имена в верхней части моя голова, но в Java есть несколько отличных подходящих библиотек - я предлагаю вам поискать одну, а не писать свою собственную функцию.


** EDIT: библиотеки, которые могут быть полезны: **

** Теория / код, который может быть полезен: **

  • Сплайновые апплеты с кодом: ссылка
  • Аркан подгонка сплайнов для полилиний к сплайнам Безье
  • Теория сплайнов и немного математики для подгонки. Больше математики, меньше кода может помочь, если библиотеки этого не делают.
13
ответ дан 5 December 2019 в 10:04
поделиться

Простую линейную интерполяцию можно рассчитать, используя что-то вроде:

Point2D interp1_lin(Point2D p1, Point2D p2, double x) {
 //Pre conditions
assert p1.x<x;
assert x<p2.x;
//Calculate slope from p1 to p2
double m = (p2.x-p1.x)/(p2.y-p1.y);
//Calculate y position of x
double y = (x-p1.x)*m+p1.y;
//create new point
return new Point2D.Double(x,y);
}

Это помогает?

0
ответ дан 5 December 2019 в 10:04
поделиться

Вам нужно получить значения x, соответствующие значениям y. В противном случае ни один алгоритм не сможет определить, является ли [1, 16, 81] x ^ 2 для [1, 4, 9] или x ^ 4 для [1, 2, 3]. Вы бы интерполировали шесть значений или ни одного?

А затем, когда вам будут заданы x-значения, вы можете использовать какую-то интерполяцию (линейный, кубический сплайн, вы называете это) для аппроксимации недостающих значений.

0
ответ дан 5 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: