Jak interpolować dane wielopunktowe do centrów komórkowych nieustrukturyzowanej siatki?

11

Mam zestawy danych pola wielopunktowego, każdy zestaw danych punktowych dotyczy pojedynczej komórki nieustrukturyzowanej siatki. Celem jest interpolacja danych do centrum komórki, bezpośrednio lub pośrednio, w jak najdokładniejszy sposób.

Jeśli użyję interpolacji z odwrotnym ważeniem odległości, w przypadku, gdy odległość między źródłem a celem (centrum komórki) jest bardzo mała, może dojść do wyjątku zmiennoprzecinkowego.

Do tego rodzaju interpolacji na siatce strukturalnej stosuje się interpolację ważoną objętościowo. Nie przekłada się to bezpośrednio na dowolnie ukształtowaną komórkę siatki.

Wprowadzenie tolerancji dla interpolacji IDW w celu obejścia SIGFPE ma sens tylko wtedy, gdy nie wprowadzę żadnych testów, które mogłyby sprawić, że interpolacja będzie nieefektywna. Czy dodanie do mianownika dostatecznie małej dla każdej masy jest możliwą opcją przy interpolacji IDW? Jakie znasz metody interpolacji tego problemu?δ

Dodatkowe informacje:

Do interpolacji od siatki do punktów używam interpolacji opartej na współrzędnych barcycentrycznych . Każda wielościenna komórka siatki jest rozkładana na czworościany. Pole wyśrodkowane na komórce jest interpolowane do punktów komórki za pomocą interpolacji IDW . Dla każdego punktu przeprowadzane jest wyszukiwanie w celu znalezienia czworościanu, w którym się on znajduje, a wartości interpoluje się za pomocą interpolacji barycentrycznej .

W przypadku interpolacji od punktów do siatki nie jest to możliwe. Wartości wyśrodkowane na komórkach są nieznane. Nie ma możliwości montażu czworościenną kompozycję wymusi , gdzie jest związany z wagą do punktu P i środka ogniwa C . Wynika to z faktu, że konfiguracja punktu jest dowolna. Tak więc obecnie używam do tego IDW, upewniając się, że nie otrzymam wyjątku zmiennoprzecinkowego. Czy istnieją bardziej odpowiednie metody interpolacji dla tego problemu?W P CpWPC=1WPC

tmaric
źródło
Czy możesz być bardziej szczegółowy w odniesieniu do używanej funkcji ważenia? Istnieje kilka podejść interpolacyjnych, które wykorzystują funkcje ważenia wielomianowego, które nie mają osobliwości w punktach końcowych.
Pedro
1
Jeśli funkcja interpolacji jest płynna, czy pomyślałeś o użyciu radialnych funkcji bazowych do globalnej interpolacji z siatki? Możesz zbudować szybki prototyp używając Pythona i Scipy, patrz tutaj: docs.scipy.org/doc/scipy/reference/generated/…
fcruz
Biblioteka, w której pracuję, faktycznie obsługuje RBF (zarówno wsparcie kompaktowe, jak i globalne), ale mam bardzo małe doświadczenie z tym. Dzięki za podpowiedź .. :)
tmaric
1
Jeśli spróbujesz biblioteki SciPy RBF, zwróć uwagę na ten wyjątkowy błąd
n00b
Czy masz wartości gradientu zmiennej zależnej w wierzchołkach komórki?
Johntra Volta

Odpowiedzi:

7

Linki do różnych pakietów oprogramowania do interpolacji danych rozproszonych znajdują się na mojej stronie internetowej http://www.mat.univie.ac.at/~neum/stat.html#fit

Książka
GE Fasshauer, Meshfree Approximation Methods with MATLAB, World Scienti fi c 2007.
zawiera obszerny najnowszy stan wiedzy (od 2006 r.).

Kilka ostatnich artykułów na temat interpolacji danych rozproszonych:
http://www.stanford.edu/group/uq/pdfs/journals/jcp_scattered_2010.pdf
http://www.math.auckland.ac.nz/~waldron/Preprints/ Box-splines / box-splines.pdf

Wybór metody zależy w dużej mierze od zastosowania wynikowego interpolanta. Metody Kriginga oparte są na modelu stochastycznym, dlatego są dobre, jeśli interpolowane dane są nieco zaszumione. Radialne funkcje bazowe powinny być preferowane, jeśli (realizowane stabilnie) i pożądany jest przyjemny wizualnie wynik (interpolacja przy niskiej krzywiźnie).

Arnold Neumaier
źródło
Profesorze Neumaier, z metod, które zebrałeś w linkach na swojej stronie i w swojej odpowiedzi, czy masz jakieś konkretne rekomendacje dla aplikacji opisanej w pytaniu?
Geoff Oxberry
Chyba muszę się trochę nauczyć ... jak zawsze, ilość rzeczy, które wymagają nauki, rośnie wykładniczo z czasem, a ilość rzeczy, których się uczę, rośnie w najlepszym wypadku liniowo. :) Dzięki. Użyję interpolacji IDW do początkowej implementacji i czytam o interpolacji danych rozproszonych (RBF wydaje się być modnym wyborem). :)
tmaric
1
@GeoffOxberry: Z czasem zbierałem linki, nie próbowałem pakietów. Dlatego nie mogę polecić konkretnego. Ale dodałem komentarz na temat rekomendacji jakościowych.
Arnold Neumaier
3

Poniżej podam przykład, w jaki sposób interpolować jeden zestaw punktów do drugiego, na siatce o skończonej objętości.

Skolokowałem układ zmiennych - dane, które przechowuję w pamięci, reprezentują wartości w centrach komórek. Przechowuję zmienne pola i ich gradienty. Gradienty są wykrywane z otaczających wartości rozwiązujących problem najmniejszych kwadratów (z QR przez odbicia Householder).

Twoje ustawienie może się różnić, ale zasada jest taka sama.

Jeśli więc szukam - wartości w centrum twarzy komórki, mogę ją uzyskać z:ϕf

ϕnb1+ϕnb1rnb1,f=ϕf

ϕnb2+ϕnb2rnb2,f=ϕf

...

ϕnbn+ϕnbnrnbn,f=ϕf

gdzie oznacza sąsiednie centrum komórkowe, przechodzą od 1 do n (bardzo często wystarczy 1, używam 2, tj. używam sąsiednich komórek, które dzielą twarz). jest wektorem odległości od centrum komórki n-tego sąsiada do środka .r n b n , f fnbrnbn,ff

Potem piszę

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

Potrzebujesz więc jednego zestawu wartości pól i gradientów w tych punktach. Musisz zdecydować, które otaczające punkty przyczynią się do twojego interpolowanego punktu, a także wektory odległości od tych punktów do punktu, do którego interpolujemy.

Na przykład: jeśli przechowuje się dane reprezentatywne dla wartości w wierzchołkach komórek, używasz tego równania, aby znaleźć wartości w centrum komórki itp., Wszystko w zależności od twojej sytuacji.

Opiera się to na serii Taylora. Można również użyć drugich pochodnych, aby uzyskać dokładniejsze wyrażenie.

John Travolta
źródło
Cześć, do tej pory nie miałem czasu na odpowiedź ... ewuacja dla z działa dla komunikacji komórka-punkt na jednolitej siatce. Mam do czynienia z ogólnymi kształtami komórek i ogólnym rozkładem punktów, więc potrzebuję ważonej interpolacji, a nie uśredniania ... przynajmniej tak mi się wydaje. ? To, co mogłem zrobić, to LSQ: zrób kwadrat swojego nawiasu i zminimalizuj ...1ϕf1n
tmaric
1
Napisałem to w moim kodzie w locie. Tutaj zakłada się tylko, że dane różnią się liniowo w przestrzeni, dlatego uwzględniono tylko pierwsze pochodne szeregu Taylora. Nie ma żadnych założeń dotyczących siatki, działa ona dla dowolnej siatki.
Johntra Volta
1
Możesz jednak dodać ciężary. Jak w rekonstrukcji gradientu najmniejszych kwadratów, gdzie mamy zarówno wersję ważoną, jak i nieważoną.
Johntra Volta
1n
Możesz skontaktować się ze mną przez e-mail (można go znaleźć w moim profilu użytkownika) w celu dalszej dyskusji. Chciałbym zobaczyć, jak rozwiążesz problem.
Johntra Volta