Selekcja odcinków funkcji będących sinusoidą

0

Witam wszystkich,
mam przed sobą następujące zadanie. Dysponując przebiegami podobnymi do podanego na obrazie poniżej:

http://img594.imageshack.us/img594/9753/sinusoida.jpg

wybrać z niego punkty tworzące sinusoidę. W tym przypadku mamy dyskretny przebieg z 60 punktów, który jest funkcją sklejaną i zachowuje się jak sinus pomiędzy punktami <0,2>, <13,33>,<44,60> a w pozostałych nie.

Muszę wziąć pod uwagę, że % punktów tworzących sinusoidę dla każdego przypadku może być inny. Jednocześnie wiem, że zawsze bierzemy pod uwagę jeden jej cykl.

Czy macie jakieś pomysły??

0

Pewnie nie rozwiąże Twojego problemu, ale ja bym to zrobił po prostu w następujący sposób.

  1. Biorę x (w Twoim przypadku x e <0,60>)
  2. Liczę dla niego sinus
  3. Sprawdzam czy wynik jest równy y przyporządkowanemu x, z którego liczyliśmy sinus.

Jak widać sposób mało optymalny. Żeby przyspieszyć najlepiej by było policzyć wartości okresowo funkcji sinus, a potem już je porównywać z y dla dużych x-ów.

0

do lukasz93, teraz wiem ze muszę doprecyzować pytanie. Jeżeli przyjmiemy, że w miejscach gdzie funkcja jest sinusem i można zapisać ją wzorem f(x)= A * sin(x + C) + B, to wartości A ,B oraz c nie są nam znane. Innymi słowy, wiemy że część przebiegu to sinus, ale nie wiemy jak jest jest on przesunięty w fazie oraz jaką ma amplitudę (znamy jedynie jego okres).

pozdrawiam

0

na moj gust jest to zadanie optymalizacyjne a konkretnie minimalizacji wartosci funkcji:

suma (A*sin(P.x+C)+B - P.y)
  P

względem parametrów A,B,C

czyli przede wszystkim nalezy znalezc dopasową sinusoide. Jak juz będziesz miał dopasowaną funkcję to wystarczy iterować po punktach z rozkladu (to ze jest on dyskretny ulatwia sprawe) i sprawdzac czy wartosc z rozkladu nie róźni się od wyznaczonej sinusoidy o wiecej niż dozwolona wartość

Do znalezienia takiej funkcji można wykorzystać dowolną metodę optymalizacji:
http://www.iit.pwr.wroc.pl/~kano/optymal/index_optymal.html
Ja kiedyś wykorzystywałem http://www.kmg.ps.pl/opt/wyklad/bezgrad/simplex.html i muszę powiedzieć, że metoda ta nieźle się spisywała

Można dodatkowo wprowadzić pewne heurystyki np: wartość B będzie w okololicy

(suma P.y)/ilosc_punktów
   P

0

Rozumiem krzyzy że po usunięciu z przebiegu punktów które od oszacowanie odstają powyżej ustalonego progu, algorytm optymalizujący przeprowadzamy ponownie i ponownie... aż pozostaną jedynie punkty mieszczące się w tolerancji.

Dzięki za podpowiedź, co do dodatkowych ograniczeń, co prawda nie zawsze są prawdziwe, ale wprowadzę je jako równania z mniejszymi wagami.

Program w matlabie już śmiga ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1