У меня есть набор данных реальных данных, например, выглядящий следующим образом:
# 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
, а ближайшее значение * больше Xlarge
, чем текущее значение X X
. - Рассчитать относительное положение для меньшего значения X
relPos = (X - Xsmall) / (Xlarge - Xsmall)
- Рассчитать ожидаемое значение Y
Yexp = Ysmall + (relPos * (Ylarge - Ysmall))
Как минимум для программного обеспечения MatlabЯ слышал, что есть встроенная функция для таких проблем.
Спасибо за вашу помощь,
Свен