Как интерполировать многоточечные данные в центры ячеек неструктурированной сетки?


11

У меня есть наборы данных многоточечного поля, каждый набор данных точки относится к одной ячейке неструктурированной сетки. Цель состоит в том, чтобы интерполировать данные в центр ячейки, прямо или косвенно, наиболее точным способом.

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

Для этого вида интерполяции на структурированной сетке используется взвешенная по объему интерполяция. Это не переводит непосредственно к ячейке сетки произвольной формы.

Введение допуска для интерполяции IDW для обхода SIGFPE имеет смысл, только если я не введу какие-либо тесты, которые могут сделать интерполяцию неэффективной. Является ли добавление достаточно малого к знаменателю для каждого веса возможным вариантом с интерполяцией IDW? Какие методы интерполяции подходят для этой проблемы, вы знаете?δ

Дополнительная информация:

Для интерполяции от сетки до точек я использую интерполяцию, основанную на барцицентрических координатах . Каждая многогранная ячейка сетки разлагается на тетраэдры. Сосредоточенное на ячейке поле интерполируется к точкам ячейки с использованием IDW-интерполяции . Для каждой точки проводится поиск, чтобы найти тетраэдр, внутри которого она лежит, и значения интерполируются с использованием барицентрической интерполяции .

pWPC=1WPC


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

1
Если функция интерполяции является гладкой, задумывались ли вы об использовании радиальных базисных функций для глобальной интерполяции из сетки? Вы можете создать быстрый прототип, используя python и scipy, смотрите здесь: docs.scipy.org/doc/scipy/reference/generated/…
fcruz

Библиотека, в которой я работаю, на самом деле поддерживает RBF (как компактную, так и глобальную поддержку), но у меня очень мало опыта в этом. Спасибо за совет .. :)
tmaric

1
Если вы попробуете библиотеку SciPy RBF, учтите эту выдающуюся ошибку
n00b

У вас есть значения градиента зависимой переменной в вершинах ячеек?
Johntra Volta

Ответы:


7

Ссылки на различные пакеты программного обеспечения для интерполяции разбросанных данных находятся на моей веб-странице http://www.mat.univie.ac.at/~neum/stat.html#fit.

Книга
GE Fasshauer, Meshfree приближенные методы с использованием MATLAB, World Scientic 2007.
дает всеобъемлющее состояние (по состоянию на 2006 год).

Несколько более свежих работ по интерполяции разбросанных данных:
http://www.stanford.edu/group/uq/pdfs/journals/jcp_scattered_2010.pdf
http://www.math.auckland.ac.nz/~waldron/Preprints/ Box-сплайны / коробчатого splines.pdf

Какой метод использовать, во многом зависит от использования полученного интерполятора. Методы Кригинга основаны на стохастической модели, поэтому они хороши, если данные, которые должны быть интерполированы, несколько зашумлены. Радиальные базисные функции должны быть предпочтительными, если (реализованы стабильно) и требуется визуально приятный результат (интерполяция низкой кривизны).


Профессор Ноймайер, из методов, которые вы собрали в ссылках на вашем веб-сайте и в своем ответе, есть ли у вас какие-либо конкретные рекомендации для приложения, описанного в вопросе?
Джефф Оксберри

Я предполагаю, что у меня есть кое-какое обучение ... как всегда, количество вещей, которым нужно учиться, растет экспоненциально со временем, и количество вещей, которые мне удается выучить, в лучшем случае растет линейно. :) Благодаря. Я буду использовать интерполяцию IDW для первоначальной реализации и прочту об интерполяции разбросанных данных (RBF, кажется, модный выбор). :)
tmaric

1
@GeoffOxberry: я собирал ссылки с течением времени, не пробуя пакеты. Таким образом, я не могу рекомендовать конкретный. Но я добавил комментарий по качественным рекомендациям.
Арнольд Ноймайер

3

Ниже я приведу пример, как я могу интерполировать от одного набора точек к другому, на сетке конечного объема.

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

Ваше расположение может отличаться, но принцип тот же.

ϕf

ϕnb1+ϕnb1rnb1,f=ϕf

ϕnb2+ϕnb2rnb2,f=ϕf

...

ϕnbn+ϕnbnrnbn,f=ϕf

nbrnbn,ff

Тогда я пишу

ϕf=1n(i=1nϕnbi+i=1n(ϕnbirnbi,f))

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

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

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


ϕf1n

1
Я написал это в своем коде на лету. Здесь только предполагается, что данные линейно изменяются в пространстве, поэтому включены только первые производные ряда Тейлора. Нет никаких предположений о сетке, она работает для любой сетки.
Johntra Volta

1
Тем не менее, вы можете добавить вес. Как в реконструкции градиента наименьших квадратов, где мы имеем как взвешенную, так и невзвешенную версию.
Johntra Volta

1n

Вы можете связаться со мной по электронной почте (вы можете найти его в моем профиле пользователя) для дальнейшего обсуждения. Мне интересно посмотреть, как вы решите проблему.
Johntra Volta
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.