Aproksymacja czy Interpolacja

Loading thread data ...

Valhalla pisze:

Jeśli chcesz interpolować to i tak musisz wygładzić żeby usunąć błędy pomiarowe. Możesz to robić odcinkami krzywą np 2 stopnia i po troszku przesuwać odcinek na którym robisz aproksymację . Przy okazji generować gęstszą siatkę danych. Możesz też użyć wielomianu na aproksymację całości. Skoro są dwa garby to i jest przynajmniej jeden dołek. Czyli musisz użyć co najmniej wielomianu 4 stopnia a najlepiej wyższego. Tylko że 10 punktów pomiarowych to stanowczo za mało żeby to dokładnie policzyć. Jeśli potrzebujesz. Nie napisałeś czy to ma być wyliczane w mikrokontrolerze czy tylko chcesz sobie odczytać sam wartości pośrednie. Jeśli dla siebie to wystarczy rysunek na papierze mm i krzywiki albo arkusz i wykres z wygładzaniem linii. W przypadku procka to interpolacja gdy nie masz mocy obliczeniowej a aproksymacja gdy nie masz dużo pamięci na dokładną tabelę.

Reply to
Mario

Dnia 24-08-2009 o 17:25:13 Valhalla snipped-for-privacy@lol.lol napisał(a):

Ja bym sobie próbował znaleźć jakiś wielomian który opisłaby taki przebieg jaki masz na wykresie (ale skoro na 10 wartościach masz dwa ekstema - to chyba trochę trzeba by się napracować, zeby znaleźć coś sensownego). BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Ewentualnie - jeżeli otrzymana dokładność by Ci wystarczyła - aproksymował bym funkcję opisującą odpowiedź przetwornika w odcinkach. Tzn. od jednego punktu gdzie znasz wartość do drugiego punktu "sąsiedniego" wyznaczałbym prostą (albo funkcję wyższego rzędu) i z równania prostej (albo funkcji wyższego rzędu) wyznaczałbym wartość argumentu. Po przekroczeniu przez odpowiedz przetwornika dziedziny funkcji aproksymującej użyłbym kolejnej funkcji która opisuje kolejny "fragment".

Kawałki kodu na mnożenie stałych przez zmienną ... jedną zmienną?

Reply to
filug

filug pisze:

Dwa garby. Między nimi musi być dolinka czyli trzy ekstrema. No i nie wiadomo co ma być poza skrajnymi punktami. Do tego przydałyby się punkty przegięcia ale to nie na takiej ilości punktów :)

BTW Matlab miał jakiegoś toolboxa do robienia takich rzeczy.

Pewnie octave ma też

Może sam chce pisać kod do robienia aproksymacji na wielomianach. Stanowczo odradzałbym. Najlepiej poszukać gotowego solvera a w kod wpisać tylko znalezioną funkcję.

Reply to
Mario

Valhalla pisze:

Interpolacja nie bardzo wyjdzie w miejscach gdzie jest większa krzywizna lub duża odległość między punktami. Musiałbyś najpierw zagęścić punkty tak jak wspominałem ale to trochę roboty. Najprościej dać wielomian począwszy od 4 stopnia i patrzeć jak leży na punktach wzorcowych. Podnosisz stopień aż przestaje być widoczna poprawa w układaniu się na punktach (możesz liczyć odchylenie standardowe w tych punktach) lub zaczynają się dziwne osobliwości (dodatkowe ekstrema) pomiędzy punktami lub na końcach zakresu. Pewnie zatrzymasz się koło 7 stopnia.

Reply to
Mario

Mario pisze:

Miało być 6. 7 to już dość wysoki.

Reply to
Mario

Mario pisze:

Na początek można zacząć od funkcji polyfit.

Reply to
Zbych

Dnia 24-08-2009 o 18:40:12 Mario snipped-for-privacy@poczta.onet.pl> napisał(a):

Racja trzy ekstema :) Mój błąd, a raczej przejęzyczenie :)

Pewnie tak, ale ocatve niestety nie miałem w ręce więc nie będę zmyślać.

Chyba nie skoro ma czujnik i potrzebuje czymś opisać jego odpowiedź.

Reply to
filug

filug pisze:

No ale nie ma funkcji kalibracyjnej. Wrzuca punkty do solvera i ma funkcję.

Reply to
Mario
Reply to
invalid unparseable

Do _dobrego_ rozwiazania trzeba troche wiecej - np szczescia przy zapuszczaniu programow bez pojecia co one robia :-)

J.

Reply to
J.F.

Valhalla schrieb:

niestety nie zawsze. Na przykład jest sobie taka funkcja do oceny zakłóceń wprowadzanych do sieci przez urządzenia energetyczne (flicker). Jest to funkcja opisana w normach, bazująca na subjektywnych odczuciach pewnej populacji. Niestety implementacja tej funkcji "z marszu" wymaga przynajmniej 128 bitowej dokładności, a najlepiej jeszcze większej, bo przy mniej dokładnych obliczeniach idzie się kurwić. W twoim przypadku próbowałbym przybliżyć funkcję kawałkami wielomianowymi 3 stopnia stosując sklejanie gładkie (spline). Jak masz Matlab lub Octave, to możesz spróbować fitting, jak już ktoś tutaj poradził, ale jak będziesz miał wzór funkcyjny, to radzę sprawdzić czułość na dyskretne współczynniki, bo może się okazać, że zmiana wartości któregoś współczynnika o 1LSB zmienia wartość funkcji kilkakrotnie.

Waldek

Reply to
Waldemar Krzok

Użytkownik "Mario" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:h6ufq6$ikj$ snipped-for-privacy@news.onet.pl... filug pisze:

Oj tam... W Excelu jest coś, co się nazywa linia trendu (wielomianowa). Radzi sobie calkiem niezle.

Maciek

Reply to
Maciek
Reply to
invalid unparseable

Krzysztof Tabaczyñski schrieb:

a robiłeś to często na komputerze? Ręcznie się da, ale komputerowo nie za bardzo. Wielomiany stopni wyższych niż 5-6 są dość upierdliwe. Musisz liczyć w double precision, a jeszcze wyżej w double double albo jeszcze gorzej. Funkcje spline są lepsze i dokładniejsze.

Waldek

Reply to
Waldemar Krzok
Reply to
invalid unparseable

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.