- posted
14 years ago
Aproksymacja czy Interpolacja
- Vote on answer
- posted
14 years ago
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ę.
- Vote on answer
- posted
14 years ago
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ą?
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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ę.
- Vote on answer
- posted
14 years ago
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.
- Vote on answer
- posted
14 years ago
Mario pisze:
Miało być 6. 7 to już dość wysoki.
- Vote on answer
- posted
14 years ago
Mario pisze:
Na początek można zacząć od funkcji polyfit.
- Vote on answer
- posted
14 years ago
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ź.
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
filug pisze:
No ale nie ma funkcji kalibracyjnej. Wrzuca punkty do solvera i ma funkcję.
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
Do _dobrego_ rozwiazania trzeba troche wiecej - np szczescia przy zapuszczaniu programow bez pojecia co one robia :-)
J.
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
- Vote on answer
- posted
14 years ago
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
- Vote on answer
- posted
14 years ago