Jak porównać cechy dwóch krzywych?

11

Muszę porównać dwie krzywe f (x) ig (x). Są w tym samym zakresie x (powiedzmy od -30 do 30). f (x) może mieć pewne ostre szczyty lub gładkie szczyty i doliny. g (x) może mieć te same szczyty i doliny. Jeśli tak, chcę sprawdzić, jak dobrze te funkcje pokrywają się bez kontroli wzrokowej. Próbowałem rozwiązać ten problem w następujący sposób.

  1. Normalizuj obie funkcje, dzieląc każdy punkt danych przez całkowity obszar funkcji. Teraz obszar znormalizowanej funkcji wynosi 1,0
  2. Przy każdym x uzyskaj minimalną wartość z f (x) ig (x). To da mi nową funkcję, która jest w zasadzie nakładającym się obszarem między f (x) i g (x).
  3. Po zintegrowaniu wynikowej funkcji z kroku 2 uzyskuję całkowity obszar nakładania się z 1,0

Nie mówi mi to jednak, czy szczyty i doliny pokrywają się, czy nie. Nie jestem pewien, czy można to zrobić, ale jeśli ktoś zna metodę, byłbym wdzięczny za twoją pomoc.

== EDYCJA == W celu wyjaśnienia zamieściłem obraz.

Przykładowe krzywe

Różnica między dwiema krzywymi (czarną i niebieską) może nie być taka sama, ale będzie miała uzupełniające kształty.

Tło: Funkcje są rzutowaną gęstością stanów (PDOS) atomowych orbitali związku. Mam więc stany dla orbitali s, p, d. Chcę ustalić, czy materiał ma hybrydyzacje sp, pd lub dd (mieszanie orbitalne). Jedyne dane, które mam, to PDOS. Jeśli powiedzmy, że PDOS s orbity (funkcja f (x)) ma szczyty i doliny jak przy tych samych energiach (wartościach x) PDOS or orbitalu (funkcja g (x)), wówczas występuje sp mieszanie w tym materiale.

laalee
źródło
1
Może zabierzesz to do mathoverflow.net ?
Euforia
1
Zastanawiam się, czy ludzie dźwięku cyfrowego mają podobne problemy?
Dan Pichelman
Dzięki Euphoric, zadam pytanie również na mathoverflow.net
laalee
@laalee Nie zadawaj pytania na więcej niż jednej stronie w sieci Stack Exchange. Również przepełnienie matematyki jest matematyką na poziomie badawczym. Wymiana stosów matematycznych nie jest poziomem badawczym. Mogę migrować to do Math lub gdzie indziej, jeśli chcesz.
Inżynier świata
Przepraszam. Próbowałem go usunąć w matematycznym przepływie, ale nie mogłem znaleźć sposobu. Byłbym wdzięczny, gdybyś mógł go usunąć. Dzięki
laalee

Odpowiedzi:

4

Jest to powszechny i ​​często trudny problem w chemii analitycznej, fizyce, spektroskopii itp. Zastosowane podejścia mogą obejmować zarówno proste porównanie RMSD, jak i bardzo wyrafinowane metody. Jeśli zadanie nie jest łatwe do wykonania przez kontrolę wzrokową (ludzie są doskonale wykształceni do rozpoznawania cech), prawdopodobnie wykonanie obliczeń będzie trudne.

Jednym z podejść jest próba usunięcia „linii podstawowych”, aby funkcje miały wartość zerową, z wyjątkiem przypadków, gdy występują cechy szczytu lub doliny. Najlepiej zrobić to z dopasowaniem krzywej za pomocą wielomianu niskiego rzędu, a jeszcze lepiej, bardziej odpowiedniego, opartego na zasadach modelu tego, jak może i powinna wyglądać linia bazowa. Jeśli piki są bardzo ostre, możesz po prostu wygładzić funkcję i odjąć wygładzoną funkcję od funkcji oryginalnej.

Po usunięciu linii bazowej możesz normalizować i generować resztki lub wykonywać RMSD (proste podejścia) lub próbować wykryć cechy szczytów / dolin poprzez dopasowanie gaussa (lub innego odpowiedniego modelu) do każdej poszukiwanej cechy. Jeśli jesteś w stanie dopasować szczyty, możesz porównać lokalizacje pików i połówki szerokości.

Spójrz na SciPy, jeśli znasz Python. Powodzenia.

Ogólny Ratzlaugh
źródło
Dziękuję za odpowiedź. Nie jestem jednak pewien, jak znaleźć punkt odniesienia. Każdy przypadek będzie miał inną funkcję, której nie mogę przewidzieć z góry.
laalee
3

Jest to po prostu „z góry mojej głowy”, więc mógłbym całkowicie nie rozumieć problemu, ale być może mógłbyś zastosować funkcję RMSD ( średnia kwadratowa ) do funkcji. Jeśli interesują Cię tylko szczyty i doliny, zastosuj je do obszarów wokół tych szczytów i dolin (to znaczy, dla niektórych x +/- niektórych epsilonów, gdzie pochodna którejkolwiek z funkcji jest równa zero). Jeśli RMSD tego zakresu jest bliskie zeru, myślę, że masz dobre dopasowanie.

dbc60
źródło
Uwzględnia to różnicę między wartościami, która nie może wynosić zero, chociaż kształty są podobne.
laalee
3

Jak rozumiem, informacje, których szukasz, są przekazywane przez „tableau des varitions” funkcji - przepraszam, że nie znam angielskiej nazwy tego!

Ta tabela jest powiązana z funkcją różniczkowalną f i konstruujesz ją, znajdując pierwiastki f ' i określając znak f' na każdym przedziale między tymi zerami.

Tak więc, jeśli zer z f „ i g” mniej więcej pokrywają się i oznaki tez funkcje zgodzą, będą one mają podobny profil.

Pierwszą rzeczą, którą chciałbym zaprogramować, były:

  1. Wybierz mały ε
  2. Narysuj losowo dużą liczbę N punktów x [i] w przedziale, w którym funkcje są zdefiniowane.

  3. Dla każdego węzła oblicz różnice F [i] = f (x [i] + ε) - f (x [i] - ε) i G [i] = g (x [i] + ε) - g (x [i] - ε) .

  4. Jeśli w każdym węźle zarówno F [i], jak i G [i] są mniejsze niż ε² LUB oba mają ten sam znak, należy stwierdzić, że obie funkcje mają prawie taki sam profil.

Czy to działa?

Michael Le Barbier Grünewald
źródło
Dzięki michipili za wnikliwą odpowiedź. Obecnie staram się dotrzymać terminu. Ale
wdrożę
1

Brute force: znajdź najmniejszą niezerową wartość zmiennoprzecinkową z tą wartością jako krok, przejdź przez całą domenę i sprawdź, czy wartości są równe?

== EDYCJA ==

Hmmm ... Jeśli przez „ten sam kształt” masz na myśli g (x) = c * f (x), to rozwiązanie należy zmodyfikować - dla każdego elementu domeny obliczasz f (x) / g (x) i sprawdzasz, czy wynik jest taki sam dla każdego punktu (oczywiście, jeśli g (x) == 0, to sprawdzasz, czy f (x) == 0, nie próbujesz dzielić).

Jeśli „ten sam kształt” oznacza „lokalne optimum i punkty zgięcia są takie same” ... Cóż, znajdź lokalne optimum i punkty zgięcia dla f (x) i g (x) (jako zestawy elementów domeny) i sprawdź, czy te zestawy są równe.

Trzecia opcja: f (x) = g (x) + c. Wystarczy sprawdzić, czy każdy element domeny ma tę samą różnicę f (x) -g (x). Jest prawie identyczny jak pierwszy przypadek, ale zamiast podziału masz różnicę.

== JESZCZE INNA EDYCJA ==

Cóż ... Drugie podejście z powyższej edycji może być przydatne. Możesz także połączyć go ze znakiem porównania pierwszej pochodnej (nie symbolicznej, ale obliczonej jako df (x) = f (x) - f (x-step)). Jeśli obie funkcje mają ten sam znak pochodnej w całej domenie, sprawdź optymas i punkty gięcia, dla pewności. Powiedziałbym, że te warunki powinny wystarczyć, aby zrobić to, czego potrzebujesz.

Filip Malczak
źródło
Dziękuję Filipowi za odpowiedź. Ale funkcje mogą nie mieć równych wartości, ale mieć ten sam kształt.
laalee
Przesuwam ten komentarz, aby odpowiedzieć jako edycja. Sprawdź to.
Filip Malczak
Dziękuję Filipowi za odpowiedź. Dodałem obraz, aby wyjaśnić mój problem.
laalee
1

jak dobrze te funkcje pokrywają się bez kontroli wzrokowej.

Prawdopodobnie najprostszym sposobem jest obliczenie współczynnika korelacji Pearsona . To znaczy użyj f (x) jako X i g (x) jako Y. Skutecznie „wykreśl g (x) jako funkcję f (x) i zobacz, jak dobrze tworzy linię prostą”.

Współczynnik korelacji jest popularny, ponieważ łatwo go obliczyć i często uzasadnia go jedynie machanie rękami. Może być dobrym początkowym przybliżeniem dla niektórych zastosowań, ale zdecydowanie nie jest panaceum.

Aby uzyskać lepsze wyniki w rzeczywistych aplikacjach, musisz zrozumieć, co dzieje się w danych, tj. Proces generujący dane. Często jest to tło , a na tym tle znajdują się ciekawe funkcje. Jeśli wrzucisz całe dane do czarnej skrzynki, możesz skończyć na porównywaniu głównie tła: czarna skrzynka nie wie, która część danych jest interesującą częścią. Aby uzyskać lepsze wyniki, często dobrym pomysłem jest usunięcie tła, a następnie porównanie tego, co zostało. Dopasowywanie linii lub krzywych lub średnich oraz odejmowanie lub dzielenie przez nie, filtrowanie dolnoprzepustowe, pasmowe lub górnoprzepustowe, podawanie danych przez jakąś funkcję nieliniową ... nazwij to.

Na pewno nie ma jednej właściwej odpowiedzi. Otrzymasz tyle różnych wyników, ile wypróbujesz metod. Ale niektóre wyniki są lepsze niż niektóre z nich. Teoretyczne rozumowanie może pomóc rozpocząć we właściwym kierunku, ale jak ustawić parametry i dostroić metodę, ostatecznie można ją znaleźć tylko poprzez wypróbowanie ich i porównanie rzeczywistych wyników.

Joonas Pulakka
źródło