У меня есть набор данных реальных данных, например, выглядит так:
# Dataset 1 with known data
known <- data.frame(
x = c(0:6),
y = c(0, 10, 20, 23, 41, 39, 61)
)
plot (known$x, known$y, type="o")
Теперь я хочу получить ответ на вопрос "Что будет иметь значение Y для 0,3, если все промежуточные точки данных исходного набора данных находятся на прямой между окружающими измеренными значениями?"
# X values of points to interpolate from known data
aim <- c(0.3, 0.7, 2.3, 3.3, 4.3, 5.6, 5.9)
Если вы посмотрите на график: я хочу получить Y-значения, где пересечения пересекаются с линейной интерполяцией известных данных
abline(v = aim, col = "#ff0000")
Итак, в идеальном случае я бы создал "linearInterpolationModel" с моими известными данными, например
model <- linearInterpol(known)
... который затем я могу запросить значения Y, например
model$getEstimation(0.3)
(который в этом случае должен дать "3" )
abline(h = 3, col = "#00ff00")
Как я могу это понять? Вручную для каждого значения я делал бы что-то вроде этого:
- Какое ближайшее X-значение меньше
Xsmall
и ближайшее X-значение большеXlarge
, чем текущее значение XX
. - Рассчитайте относительное положение меньшего значения X
relPos = (X - Xsmall) / (Xlarge - Xsmall)
- Рассчитать ожидаемое значение Y
Yexp = Ysmall + (relPos * (Ylarge - Ysmall))
По крайней мере, для программного обеспечения Matlab я слышал, что для таких проблем есть встроенная функция.
Спасибо за вашу помощь,
Свен