Model hiperboli

0

Witam
Zależy mi na stworzeniu 'modelu' hiperboli na podstawie współrzędnych. Na wejściu mam N punktów(x,y). Dla jakiejś określonej liczby punktów K << N chciałbym stworzyć model pasujący do tych K puntów. Po wygenerowaniu jakiejś ilości pseudolosowych modeli chce przepuścić wszystko przez Ransaca, tak aby znaleźć ten najlepiej pasujący. Niestety mój problem pojawia się na samym początku. Nie wiem jak wyznaczyć model hiperboli z K punktów, a niestety opisu z wikipedii nie rozumiem zbyt dobrze: http://en.wikipedia.org/wiki/Hyperbola#Quadratic_equation

Czy mógłbym prosić kogoś o jakieś wskazówki/wytłumaczenie jak się do tego zabrać? :)

0

To to jest niby model hiperboli? Chodzi ci może o interpolacje/aproksymacje zbioru punktów hiperbolą?

0

taki dość prymitywny sposób przybliżenia. nie jest to dokładny przepis a jedyne wskazówka jak można się do tego zabrać.
jeśli hiperbola dana jest równaniem ogólnym: y = a/(x-x0) + y0
gdy a>0, to x0 i y0spełniają warunki:
dla każdego x >= x0: y >= y0 oraz dla każdego x <= x0: y <= y0. analogicznie gdy a<0.
oczywiście dane punkty nie muszą układać się dokładnie na hiperboli, więc mogą być drobne odstępstwa i niektóre punkty nie będą spełniać tych warunków.
gdy mamy wyznaczony punkt (x0, y0) to należy jeszcze wyliczyć współczynnik a. jak? liczymy pole pod wykresem hiperboli. w przypadku gdy a>0 to bierzemy tylko fragment dla x>=x0, y>=y0 i liczymy pole wielokąta który tworzą te punkty, dodając jeszcze (xi, y0), (xi, ymax), (xmax, yj). (xmax, y0), gdzie xi to x dla którego y jest największe, yj to y dla którego x jest największe i ze wzoru Gaussa (http://pl.wikipedia.org/wiki/Metoda_analityczna_obliczania_pól). pole pod wykresem hiperboli łatwo policzyć. a*ln(xmax/xi) porównać oba wyniki i mamy współczynnik a, czyli wszystko co jest potrzebne do równania.

EDIT:
wyznaczanie x0: x_0 = \frac{\sum x_i |y_i|}{\sum |y_i|}. analogicznie dla y0.
jeżeli suma wszystkich y odpowiadających x większym od x0 jest większa od 0, to przyjmujemy że a>0

1

@up: totalnie bezsensu, bo twoja hiperbola zakłada kierunek asymptot.

wszystkie krzywe stożkowe, muszą spełniać równanie (drugiego stopnia z dwiema niewiadomymi):
a_{11}x<sup>2+a_{12}xy+a_{22}y</sup>2+a_{13}x+a_{23}y+a_{33}=0
współczynniki aij decydują, jakiego typu jest to krzywa (hiperbola/parabola/elipsa/okrąg).
Hiperbole masz, gdy: a_{11}a_{22}-\frac{1}{4}a_{12}^2&lt;0
Gdybyś miał 5 punktów spawa wyznaczenia a była by prosta, gdy masz ich dużo więcej i na dodatek niedokładnych to sprawa się dość komplikuje.
Przeszukiwanie wszystkich możliwych 4rek jest zbyt czasochłonne. Może algorytm genetyczny, byłby rozwiązaniem?

Podaj więcej informacji jak wyglądają dane:
Jaka jest precyzja punktów, ile ich jest, czy może być więcej niż jedna pasująca hiperbola, jaki odsetek punktów powinien pasować do jednej hiperboli.
Przykładowy rysunek byłby najbardziej sugestywny.

0
MarekR22 napisał(a):

@up: totalnie bezsensu, bo twoja hiperbola zakłada kierunek asymptot.
a_{11}x<sup>2+a_{12}xy+a_{22}y</sup>2+a_{13}x+a_{23}y+a_{33}=0

Danymi na wejściu są współrzędne punktów, z których większość leży na krzywej. Na wejściu jest ich ok 200-250. Losuję sobie 5 z nich, tworze dla nich model, a następnie sprawdzam, z jak dobrze dany model odpowiada reszcie punktów. I tak w kółko 100.000 razy. Zazwyczaj udaje mi się znaleźć model, który mniej więcej pasuje dla 75% punktów, czyli takiej ilości, jaka była poprawna na wejściu. Czyli to o co mi chodziło działa całkiem fajnie ;) Dzięki za pomoc :D

0

A w jaki sposób mierzysz dopasowanie danego punktu do danej hiperboli?

0

Sprawdzam, czy wartość bezwzględna modelu,
a_{11}x<sup>2+a_{12}xy+a_{22}y</sup>2+a_{13}x+a_{23}y+a_{33}=0
po wstawieniu współrzędnych punktu jest mniejsza od stałej modelerror, jaką sam sobie przyjąłem. Jeśli jest, uznaje punkt za pasujący do modelu, jeśli nie, to nie :)

0

Pytam, bo myślałem, że wymyśliłeś coś lepszego. Ten sposób jest trochę do d**y bo nie równo traktuje punkty w zależności od ich położenia (w porównaniu do zwykłej euklidejskiej odległości od hiperboli). Punkty bliżej początku układu współrzędnych będą się dopasowywać lepiej, te dalej - gorzej. Na dodatek ta zależność rośnie kwadratowo!

0
debris napisał(a):
MarekR22 napisał(a):

@up: totalnie bezsensu, bo twoja hiperbola zakłada kierunek asymptot.
a_{11}x<sup>2+a_{12}xy+a_{22}y</sup>2+a_{13}x+a_{23}y+a_{33}=0

Danymi na wejściu są współrzędne punktów, z których większość leży na krzywej. Na wejściu jest ich ok 200-250. Losuję sobie 5 z nich, tworze dla nich model, a następnie sprawdzam, z jak dobrze dany model odpowiada reszcie punktów. I tak w kółko 100.000 razy. Zazwyczaj udaje mi się znaleźć model, który mniej więcej pasuje dla 75% punktów, czyli takiej ilości, jaka była poprawna na wejściu. Czyli to o co mi chodziło działa całkiem fajnie ;) Dzięki za pomoc :D

Jeżeli wiesz, że przeważająca większość punktów spełnia mniej więcej równanie jakiejś paraboli, możesz losować więcej punktów, a ograniczyć liczbę iteracji. Sądzę, że już po około stu (a nie 100.000) powinieneś znaleźć coś dobrego. Na koniec ponownie wyznacz model za pomocą wszystkich punktów, które uznałeś za inliners.

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