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

Прежде чем вы сможете запускать пользовательский код, вы должны запретить отправку формы, иначе она будет отправлена ​​до запуска кода. Это можно сделать с помощью e.preventDefault(). Например:

$("form").submit(function (e) {
    e.preventDefault();
    ...
}
9
задан dmckee 6 March 2009 в 03:45
поделиться

4 ответа

Уф! Большой предмет.

"Правильный" ответ во многом зависит от Вашей проблемной области и различных деталей того, что Вы делаете.

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

Вы не можете добавить информацию, таким образом, Вы просто пытаетесь установить что-то, что посмотрит хорошо.

Концептуально простое предложение (но реализация может быть некоторая работа):

Для каждого региона на недостающих данных определите все граничные точки. Это - находка x's в этом числе

oooxxooo
oox..xoo 
oox...xo
ox..xxoo
oox.xooo
oooxoooo

где.'s является точками недостающие данные, и x's и o's имеют данные (для единственной недостающей точки, это будет четырьмя ближайшими соседями). Заполните каждую недостающую точку данных со средним числом по граничным точкам вокруг этого блоба. Заставить его сглаживать, вес каждая точка 1/d где d является taxidriver расстоянием (дельта x + дельта y) между двумя точками..


До у нас были любые детали:

В отсутствие такой информации Вы попробовали прямо вперед линейную интерполяцию? Если Ваши данные являются довольно плотными, это могло бы сделать это для Вас, и достаточно просто кодировать встроенный при необходимости в нем.

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


Когда мне нужно что-то более мощное, чем быстрая линейная интерполяция, я обычно использую КОРЕНЬ (и выбираю один из классов TSpline), но это может быть больше служебным, чем Вам нужно.

Как отмечено в комментариях, КОРЕНЬ является большим, и в то время как это быстро, это действительно пытается вынудить Вас сделать вещи КОРНЕВОЙ путь, таким образом, это может иметь большой эффект на Вашу программу.


Линейная интерполяция между (или действительно экстраполяция от) две точки (x1, y1) и (x2, y2) дает Вам

 y_i = (x_i-x1)*(y2-y1)/(x2-x1)
7
ответ дан 4 December 2019 в 10:34
поделиться

если я понимаю, что Ваша потребность следующие.

Я думаю, что у Вас есть подмножество x, y, Интенсивности для размера Д на Ш, и Вы хотите заполниться для всех X в пределах от 0 к L и Y в пределах от 0 к W.

Если это - Ваш вопрос, то решение состоит в том, чтобы получить другую интенсивность при помощи Фильтров.

Я думаю, фильтр Байера или Гауссов фильтр сделали бы задание для Вас.

Можно погуглить эти фильтры, и Вы заставите ответы реализовывать.

Всего наилучшего.

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

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

Существует несколько общих схем интерполяции разрозненных данных в 2-м. На самом деле, для тех, у кого есть доступ к нему, очень хорошая статья доступна (Richard Franke, "Интерполяция разрозненных данных: Тесты некоторых методов", Математика Вычисления, 1982.)

Возможно, наиболее распространенный используемый метод основан на триангуляции Ваших данных. Просто создайте триангуляцию домена от Ваших точек данных. Затем любая точка в выпуклой оболочке данных должна лечь внутри точно один из треугольников, или это будет на общем краю. Это позволяет Вам интерполировать линейно в треугольнике. Если Вы используете MATLAB, то функция griddata доступна для этой специальной цели.)

Проблема при попытке заполнить полное прямоугольное изображение от рассеянных точек состоит в том, что очень вероятно данные не расширяются на 4 угла массива. В таком случае основанная на триангуляции схема перестанет работать, так как углы массива не лежат в выпуклой оболочке рассеянных точек. Альтернатива затем должна использовать "радиальные основные функции" (часто сокращал RBF). Существует много таких схем, которые будут найдены, включая Кригинг при использовании сообществом геостатистики.

http://en.wikipedia.org/wiki/Kriging

Наконец, inpainting является названием схемы интерполяции, где элементы даны в массиве, но где там пропускают элементы. Имя, очевидно, относится к тому сделанному реставратором, который должен восстановить слезу или разрыв в ценной части иллюстраций.

http://en.wikipedia.org/wiki/Inpainting

Идея позади inpainting состоит в том, чтобы обычно формулировать краевую задачу. Таким образом, определите дифференциальное уравнение в частных производных на регионе, где существует дыра. Используя известные граничные значения, заполните дыру путем решения PDE для неизвестных элементов. Это может быть в вычислительном отношении интенсивно, если существует огромное число неизвестных элементов, так как оно обычно требует решения, по крайней мере, значительной редкой системы линейных уравнений. Если PDE является нелинейным, то это становится более интенсивной проблемой все же. Простым, довольно хорошим выбором для PDE является Лапласиан, который приводит к линейной системе, которая экстраполирует хорошо. Снова, я могу предложить решение для пользователя MATLAB.

http://www.mathworks.com/matlabcentral/fileexchange/4551

Лучший выбор для PDE может прибыть из нелинейного PDEs. Однажды такой уравнение Навье/Топить. Это хорошо подходит для моделирования типов поверхностей, обычно замеченных, но также более трудно иметь дело с. Как во многих фасетах жизни, Вы получаете то, за что Вы платите.

12
ответ дан 4 December 2019 в 10:34
поделиться

Учитывая, что это простой школьный проект, вероятно, самый простой метод интерполяции для реализации - это «Ближайшие соседи»

Для каждой отсутствующей точки данных вы находите ближайшую «заполненную» точку данных и используете ее в качестве значения.

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

вес может быть пропорционален расстояние от точки до точки с отсутствующими данными.

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

1
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

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