Aproksymacja liniowa, podstrajanie algorytmu

Przybliżanie, metoda najmniejszych kwadratów, wielomiany interpolacyjne i inne.
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

Witam serdecznie. Chciałem przedstawić problem który do tej pory nie został rozwiązany. Mianowicie mam utworzony algorytm aprokcymacyjny detektora zbliżeniowego który przetwarza częstotliwosć na odległość od przedmiotu. Problem polega na tym że każdy czujnik jest nieco inny fabrycznie i trzeba dla każdego robić od nowa funkcje aproksymacyjną. Czy jest możliwość wstawienia jakiś dodatkowych zmiennych które będą mogły "w locie" podciągać i opuszczać punkty na krzywej?
Nie jestem matematykiem, tymbardziej specem od aproksymacji. Ale wydaje mi się że da się jakoś wpływać na ten algorytm

Przykładowa funkcja wygląda tak:

x = (1.5655280506109E-18 * pow(F,5) + (-6.41019160055401E-14 * pow(F,4) + (1.02686621303166E-9 * pow(F,3) + (-5.02407163926825E-6 * pow(F,2) + (0.0679058981995141 * pow(F,1) + (-4.54639033959083 * pow(F,0)))))));

Pozdrawiam
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Adifek »

To nie jest funkcja ani w matematycznym ani w informatycznym sensie Przedstaw porządnie problem jeśli chcesz, by ktokolwiek był stanie Ci pomóc.
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

Dziękuje za odpowiedz. To jest funkcja aproksymacyjna jak najbardziej, przedstawiona w C (chyba że czepiamy się nazewnictwa). Chodzi o dostęp do algorytmu z zewnątrz, jego korekcję w określonych przedziałach za pomocą odpowiedniego parametru czy zmiennej. Pozdrawiam:)
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Adifek »

Tak, czepiamy się nazewnictwa
Możemy dostrajać aproksymację na wiele sposobów, w zależności od tego jak wygląda tutaj model obserwacji. Ale żeby powiedzieć coś więcej, musiałbyś rozwinąć, co robi faktycznie ten kod w C, tzn. przynajmniej podpowiedzieć czym jest x, a czym F (bo domyslam się, że to nie 15 ).

Ja to widzę tak, że masz coś w stylu

\(\displaystyle{ x = \sum_{i=0}^5 a_i F^i}\),

zgadza się? W takim razie nawet zwykła regresja liniowa powinna tutaj zadziałać dobrze
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

F to częstotliwość
x to odległość

Wzór określa na sztywno dany egzemplarz czujnika. Chodzi o to żeby do nowego czujnika nie wyliczać od nowa całego algorytmu tylko za pomocą zmiennej podstroić go tam gdzie przekłamuje.

Załóżmy że dla czujnika nr

F=100 x=1cm
F=250 x=2cm
F=400 x=5cm
F=600 x=7cm

Obliczam dla tego aproksymacje i mam wzor ktory mi wylicza x
A teraz mam czujnik taki sam ale ma troche inną charakterystykę i załóżmy

F=100 x=1,2cm
F=250 x=2,4cm
F=400 x=5cm
F=600 x=7,3cm

I teraz biore algorytm z pierwszego i dostrajam jakąś zmienną. Nie wyliczam na nowo.
Dodam że tych punktów jest więcej niż 4...
pozdrawiam
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Adifek »

Chyba nie rozumiem. Masz obserwacje dla jednego czujnika i obliczasz jakąś funkcję aproksymującą. Jeśli, tak jak piszesz, masz obserwacje dla kolejnego czujnika, to najlepiej powtórzyć tę operację dla nowych danych wejściowych. Z kolei, jeśli nie masz obserwacji dla drugiego czujnika, to znalezienie funkcji aproksymującej nie jest możliwe.

Podam najprostszy przykład - jedna częstotliwość:

Wiemy np., że czujnika nr 1 masz zależność \(\displaystyle{ x=5F}\). Masz drugi czujnik i nie masz pomiarów, ale wiesz, że współczynnik raczej nie wynosi \(\displaystyle{ 5}\), bo jak sam mówisz czujniki się trochę różnią. Co możesz zrobić? Jedynie wziąć go z kapelusza albo pozostać przy piątce, wiedząc, że najpewniej jest zła. Z kolei mając obserwacje, możesz go wyliczyć.

Widzę jeszcze inne potencjalne możliwości:

1. Jeżeli masz współczynniki dla całkiem sporej liczby czujników, ale dla innych już nie jesteś w stanie wszystkiego liczyć. Wtedy możesz próbować znaleźć rozkład (w sensie rozkładu prawdopodobieństwa) tych współczynników i dla kolejnych czujników losować je zgodnie z tym rozkładem. Wadą jest to, że choć dla całkiem znacznej części czujników aproksymacja będzie akceptowalna, to dla pewnej frakcji będzie zapewne całkowicie błędna.

2. (rozsądniejsze) Być może dysponujesz jakimiś dodatkowymi cechami tych czujników (producent, nr partii, czas produkcji - nie znam specyfiki tematu). Wtedy, mając współczynniki dla pewnej grupy czujników, można pokusić się o znalezienie zależności między tymi współczynnikami a tymi dodatkowymi cechami i na jej podstawie dostrajać nowe czujniki.
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: mdd »

Jak czytam to co Kolega Ebugogo napisał, to kojarzy mi się to np. z filtrem RLS (ewentualnie WRLS). Może Kolega jest na drodze do dość podobnego wynalazku
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

Spróbuje jeszcze raz to wyjaśnić o co mi chodzi: Aproksymacja dla czujnika X jest wpisana w pamieć ROM, kolejne czujniki są prawie identyczne, mogą się różnić tylko nieznacznie (czyli pokazują prawie tak samo, a obliczanie aproksymacji dla każdego kolejnego jest czasochłonne, nie ma żadnej zależności między nimi, ktoś mi radził żeby obliczać aproksymacje dla kolejnych a potem np z 10 funkcji wybrać funkcją case ten najbardziej zbliżony do kolejnego - ale to jest wg mnie słabe rozwiązanie.
Chodzi mi o coś takiego: podpiałem drugi czujnik ktory pokazuje np zamiast 1cm to 1,2cm wiec klikam przyciskiem w gore lub dol a jakas zmienna wpisywana jest w eeprom i pokazuje teraz 1cm. Czyli mikroprocesor ma caly czas podane dane strumienia F. Ale nie wyliczam od nowa aproksymacji. Aproksymacja jest wyliczana na komputerze, a potem wczytana w mikroprocesor. Chciałbym po prostu aktywnie stroić algorytm.( dla tych punktow na podstawie ktorych byl obliczany algorytm dla powiedzmy 13 punktow. Rozwiazanie nie musi byc tez super precyzyjne bo sama aproksymacja tez super precyzyjna nie jest. Chociaż 2-3 takie punkty ktore przeciagna ten algorytm pod nowy czujnik. pozdrawiam

ps ten RLS wyglada ciekawie:)

ps2. Dałoby się zmusić mikrokontroler żeby sam obliczał taki algorytm aproksymacyjny jak w 1 moim poscie na podstawie kilku punktow?
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: mdd »

Ebugogo pisze:I teraz biore algorytm z pierwszego i dostrajam jakąś zmienną. Nie wyliczam na nowo.
Jedyne co można zrobić to dostrajanie parametrów modelu. Wyliczanie "na nowo" jest konieczne. Nie masz wyboru moim zdaniem. Nawet rekurencyjny algorytm RLS z zapominaniem nie uchroni Ciebie przed liczeniem na nowo. Jedyne co może Ci RLS zaoferować (i inne jemu podobne wynalazki), to znaczące zmniejszenie ilości obliczeń podczas dostrajania (w stosunku do tradycyjnego algorytmu LS), dzięki któremu podobno udaje się algorytm RLS stosować w czasie rzeczywistym.
Ebugogo pisze:ps ten RLS wyglada ciekawie:)
Miałem oczywiście na myśli to: ew. to:

Kod: Zaznacz cały

https://en.wikipedia.org/wiki/Recursive_least_squares_filter
.
Ebugogo pisze:Chciałbym po prostu aktywnie stroić algorytm.( dla tych punktow na podstawie ktorych byl obliczany algorytm dla powiedzmy 13 punktow.
Pytanie tylko na podstawie czego ma być strojony ten model (parametry modelu)?
Napisałeś:
Ebugogo pisze:Chodzi mi o coś takiego: podpiałem drugi czujnik ktory pokazuje np zamiast 1cm to 1,2cm wiec klikam przyciskiem w gore lub dol a jakas zmienna wpisywana jest w eeprom i pokazuje teraz 1cm.
Na podstawie czego wiesz, że w rzeczywistości jest \(\displaystyle{ 1 \ \text{cm}}\), a nie \(\displaystyle{ 1,2 \ \text{cm}}\)? W jaki sposób i kiedy ta wiedza ma być dostarczana do algorytmu adaptującego współczynniki modelu?
Ebugogo pisze:Dałoby się zmusić mikrokontroler żeby sam obliczał taki algorytm aproksymacyjny jak w 1 moim poscie na podstawie kilku punktow?
Jeśli o mnie chodzi, to nie mam doświadczenia w programowaniu procesorów. Nie znam się na tym. Nie możesz po prostu na swoim komputerze zrobić takiej aproksymacji i przepisać wyniki obliczeń do mikrokontrolera?
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

Ebugogo pisze:Chciałbym po prostu aktywnie stroić algorytm.( dla tych punktow na podstawie ktorych byl obliczany algorytm dla powiedzmy 13 punktow.
Pytanie tylko na podstawie czego ma być strojony ten model (parametry modelu)?
Napisałeś:
Ebugogo pisze:Chodzi mi o coś takiego: podpiałem drugi czujnik ktory pokazuje np zamiast 1cm to 1,2cm wiec klikam przyciskiem w gore lub dol a jakas zmienna wpisywana jest w eeprom i pokazuje teraz 1cm.
Na podstawie czego wiesz, że w rzeczywistości jest \(\displaystyle{ 1 \ \text{cm}}\), a nie \(\displaystyle{ 1,2 \ \text{cm}}\)? W jaki sposób i kiedy ta wiedza ma być dostarczana do algorytmu adaptującego współczynniki modelu?

Na podstawie wzorców tak samo jak obliczam algorytm. Przykładam czujnik do wzorca 1cm i F równa się ileś tam, wtedy ją podtawiam do tabelki i licze algorytm i tak kilkanascie punktow. Więc kiedy przyloże nowy czujnik do wzorca to F bedzie wtedy minimalnie, wieksze/mniejsze
Ebugogo pisze:Dałoby się zmusić mikrokontroler żeby sam obliczał taki algorytm aproksymacyjny jak w 1 moim poscie na podstawie kilku punktow?
Jeśli o mnie chodzi, to nie mam doświadczenia w programowaniu procesorów. Nie znam się na tym. Nie możesz po prostu na swoim komputerze zrobić takiej aproksymacji i przepisać wyniki obliczeń do mikrokontrolera? [/quote]

No właśnie teraz tak jest ale chciałem uprościć sprawę bo za każdym razie trzeba robić tabelkę ze wzorcami liczyc algorytm przepisywać itd.

Dodam że cała tabela lub kilka punktow moze byc zaszyte w eeprom i edytowalne, tylko jak to wykorzystac do wyliczen jesli algorytm jest w ROM na sztywno
Awatar użytkownika
Medea 2
Użytkownik
Użytkownik
Posty: 2491
Rejestracja: 30 lis 2014, o 11:03
Płeć: Kobieta
Podziękował: 23 razy
Pomógł: 479 razy

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Medea 2 »

Jeżeli chcesz interpolować wielomian piątego stopnia na podstawie sześciu wartości, to na to chyba są gotowe wzory, prawda? A nawet jeśli ich nie ma, to możesz je wyprowadzić. Tyle tylko, że im wyższy stopień wielomianu, tym gorsze obliczenia. Dlaczego więc zdecydowałeś się na piąty?
Ebugogo
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 18 lip 2015, o 21:57
Płeć: Mężczyzna
Lokalizacja: Jasło

Aproksymacja liniowa, podstrajanie algorytmu

Post autor: Ebugogo »

Konkretnie przy 13 punktach, wybrałem piaty bo wyszła niska odchyłka a ostatecznie na precyzji też zależy, pozdrawiam
ODPOWIEDZ