Как интерполировать точки между двумя неправильными наборами данных?

извините за несколько запутанный заголовок, но я нене уверен, как подвести итог, чтобы сделать это более понятным.

У меня есть два набора данных X, Y, каждый из которых соответствует общему общему значению. Они довольно плотно взяты из необработанных данных. Что я'm ищет способ найти интерполированный X для любого заданного Y для значения между наборами, которые у меня уже есть.

График делает это более понятным:

В этом случае красная линия принадлежит набору, соответствующему 100, желтая линия - к набору, соответствующему 50.

Я хочу сказать, что если эти наборы соответствуют градиенту значений (даже если они явно состоят из дискретных измерений X, Y), как я могу найти, скажем, где будет X, если Y равен 500? для набора, который соответствует значению 75?

В приведенном здесь примере я ожидаю, что желаемая точка будет где-то здесь:

Мне не нужна эта функция, чтобы быть чрезмерно модной -это может быть простая линейная интерполяция точек данных. Я'Мне просто трудно обдумать это.

Обратите внимание, что ни X, ни Y двух наборов не перекрываются идеально. Однако это довольно тривиально сказать:где находятся ближайшие X точек, которые разделяют эти множества " или же "где находятся ближайшие точки Y, которые разделяют эти множества ".

Я использовал простую интерполяцию между известными значениями (например, найти X для соответствующих Ys для набора "50" а также "100"тогда усредни те, чтобы получить75") и я получаю что-то похожее на это:

Ясно, что я делаю что-то здесь не так. Очевидно, что в этом случае X (правильно) возвращается как 0 для всех тех случаев, когда Y больше, чем максимум Yнизкий» задавать. Все начинается хорошо, но где-то вокруг, когда человек начинает приближаться к максимальному Y для самого низкого набора, он начинает становиться беспорядочным.

Это'Легко понять, почему у меня не получается. Вот'Еще один способ взглянуть на проблему:

В "правильный" версия, Х должно быть около 250. Вместо того, что яm делает в среднем 400 и 0, поэтому X равен 200. Как мне решить для X в такой ситуации? Я думал, что билинейная интерполяция может содержать ответ, но ничего, что яудалось выяснить, что дало понять, как яЯ бы пошел на подобные вещи, потому что все они, похоже, структурированы для несколько разных проблем.

Спасибо за помощь. Обратите внимание, что хотя я, очевидно, привел приведенные выше данные в R, чтобы было легче увидеть, что яЯ говорю о том, что окончательная работа для этого в Javascript и PHP. Я'я не ищу что-то сверхмощное; просто лучше.

Ответы на вопрос(1)

Ваш ответ на вопрос