Aproksymacja średniokwadratowa fnkcji ciągłej za pomocą wielomianów. Często w praktyce programistycznej zachodzi potrzeba przybliżenia jakiejś ciągłej fnkcji w zadanym przedziale inną fnkcją, łatwiejszą do obliczenia przez kompter. Jedną z najłatwiejszych dla komptera fnkcji jest wielomian, dlatego, że wymaga wykonywania jedynie operacji dodawania i mnożenia. Wielomian możemy sobie zdefiniować w sposób następjący: W x = a i x i (1) i=0 gdzie to stopień wielomian. ajbardziej znanymi wielomianami są dwmian (którego wykresem jest linia prosta) w postaci y=a 1 x+a 0, oraz trójmian kwadratowy (którego wykresem jest parabola) w postaci y= x +a 1 x+a 0. W praktyce obliczeniowej przydają się także wielomiany wyższych rzędów. Zagadnieniem najważniejszym przy zastępowani jakiejś fnkcji przybliżeniem wielomianowym jest określenie współczynników tego wielomian a i w taki sposób, aby popełniany błąd był jak najmniejszy w zadanym przedziale. O tym jest właśnie ten tekst. Zacznijmy od tego w jaki sposób będziemy oceniać to, jak dobrze jakiś wielomian (czy ogólnie jakaś fnkcja przybliżająca) przybliża naszą oryginalną fnkcję f(x). Używanych jest kilka kryteriów, z których najczęstsze są trzy: 1. Maksymalna odchyłka powinna być jak najmniejsza. Z pozor niezłe kryterim, problem tylko w tym, że za cenę zmniejszenia odchyłki maksymalnej możemy dostać fnkcję, która np. w żadnym miejsc nie pokrywa się z oryginałem.. Sma (a ściślej całka) wartości bezwzględnej odchyłek w zadanym przedziale powinna być jak najmniejsza. To jż lepiej, ale to kryterim (aproksymacja z jego życiem jest nazywana aproksymacją jednostajną) przykłada zbyt dżą wagę do dżych odchyłek, nie zapewniając możliwie najlepszej jakości przybliżenia tam, gdzie odchyłka jest mniejsza. Dodatkowo fnkcja wartości bezwzględnej ma nieciągłą pochodną co stwarza problem przy obliczeniach. 3. Sma (całka) kwadratów odchyłek w zadanym przedziale powinna być jak najmniejsza. To jest tak zwana aproksymacja średniokwadratowa. Ta daje dobre jakościowo przybliżenia no i nie ma problemów z nieciągłością pochodnej fnkcji kwadratowej. Tą właśnie aproksymację zastosjemy. Zanim się zabierzemy do pracy, należałoby formalnie zapisać nasze średniokwadratowe kryterim. Oznaczmy fnkcję oryginalną jako f(x), przybliżający wielomian będzie oznaczony jako W(x). Przedział w którym przybliżamy będzie się rozciągał od do. W tym momencie możemy napisać fnkcję błęd E: E= f x W x dx () Od czego zależy (albo ściślej fnkcją jakich zmiennych jest) E? Wbrew pozorom E nie jest bynajmniej fnkcją x, zmienna ta po prost pod całką przebiega od do. Błąd średniokwadratowy E zależy oczywiście od postaci fnkcji W, a ponieważ W jest wielomianem, to błąd zależy od wspólczynników wielomian. Wstawiając (1) do () i zapisjąc jawnie zmienne fnkcji E otrzymamy:
E a 0,a 1,,a = f x a i x i dx (3) i=0 Teraz czeka nas znalezienie minimm tej fnkcji. Minimm błęd to najdokładniejsza aproksymacja. Minimm fnkcji od raz kojarzy się nam z zerowaniem się w tym miejsc jej pochodnej. A co jeżeli znajdziemy maksimm? Ano nie znajdziemy, matematycznie ściśle wyjdzie to nam trochę później, na razie odrobinka geometrycznej inticji. asza oryginalna fnkcja w przedziale (, ) to jakiś kawałek krzywej, wielomian W w tym samym przedziale to też kawałek krzywej. Jeżeli teraz byśmy chcieli zrobić anty-aproksymację (zyskać maksymalny możliwy błąd) to nic nas nie powstrzyma przed zwiększaniem tego błęd w nieskończoność. a chłopski rozm więc, maksimm nie znajdziemy. A czy msimy znaleźć w ogóle jakieś ekstremm (czyli minimm, bo maksimm własnie wyeliminowaliśmy)? Trzymając się naszej geometrycznej inticji jeżeli będziemy wyginać nasz wielomian, zmieniając m współczynniki to jakaś ich kombinacja msi dać najmniejszy możliwy błąd. I to będzie właśnie nasze poszkiwane minimm. Jeżeli ktoś nie wierzy w geometryczne inticje to śpieszę go zawiadomić, że panowie Weierstrass i Stone dowodnili, że każdą fnkcję ciągłą w pewnym przedziale da się przybliżyć w tym przedziale wielomianem (odpowiedniego stopnia rzecz jasna) z dowolną dokładnością. Jest to twierdzenie nazwane (co za niespodzianka...) twierdzeniem Weierstrassa- Stone'a. Jak szkamy minimm? Patrzymy gdzie się zerje pochodna fnkcji. W przypadk fnkcji wiel zmiennych (a taką jest E) poszkiwane minimm będzie się znajdowało w miejsc gdzie wyzerją się wszystkie pochodne cząstkowe. Msimy więc znaleźć wszystkie pochodne cząstkowe fnkcji E. Wygląda groźnie? ic podobnego. ajpierw sobie podniesiemy do kwadrat to nasze wyrażenie podcałkowe. Żeby było lepiej widać pewne rzeczy, rozpiszę to mnożenie w postaci tabelki. F x a 0 a 1 x x x 3 F x F x a 0 F x a 1 xf x x F x x 3 F x a 0 a 0 F x a 0 a 0 a 1 x a 0 x a 0 x 3 a 1 x a 1 xf x a 0 a 1 x a 1 x a 1 x 3 a 1 x 4 x x F x a 0 x a 1 x 3 x 4 x 5 x 3 x 3 F x a 0 x 3 a 1 x 4 x 5 x 6 Dostajemy całą masę wyrazów, oczywiście wszystko to pod całką. Jak wiadomo z teorii całkowania całkę smy jakichś wyrażeń możemy zapisać jako smę całek. I to wszystko potem całkować i liczyć pochodnych cząstkowych? a szczęście nie wszystko. W momencie, kiedy liczymy pochodną δe/δa i wszystkie wyrazy nie zawierające a i nam się wyzerją, więc możemy je pominąć. Przykładowo w tabelce zaznaczyłem wszystkie wyrazy potrzebne do policzenia pochodnej cząstkowej δe/δ. Spróbjmy je zapisać w jakimś zwartym wyrażeni, zwracając wagę na to, że tabela jest symetryczna względem głównej przekątnej. = x F x dx a 0 x dx a 1 x 3 dx x 4 dx x 5 dx (4)
Wyrzćmy teraz co się da przed całki, a wyrazy od drgiego do końca zapiszmy korzystając ze znak smy: = = x F x dx a 0 1 x F x dx x dx a 1 x 3 dx (5) a j x j dx x 4 dx x dx 5 x 4 dx j=3 a j x j (6) dx Ttaj proszę zwrócić wagę na specjalne traktowanie element tabeli, dla którego j =. Wszystkie inne elementy występją w tablicy dwa razy, ale ten tylko raz, dlatego nie mógł zostać wciągnięty pod znak smy, a i pochodna z niego będzie liczona inaczej (bo występje t w kwadracie, a nie tak jak wszędzie w pierwszej potędze). Analogicznie moglibyśmy dla każdej pochodnej cząstkowej po a i napisać: = a i a i a i i 1 x i F x dx a i a j x i j dx a i x i dx a i j=i 1 a j x i j (7) dx Zwróćmy teraz wagę na fakt, że do policzenia pochodnej nie msimy wcale liczyć tych całek (a przynajmniej nie od raz), z pnkt widzenia zmiennej a i są one bowiem stałymi. o to bierzemy się za różniczkowanie: = a i i 1 x i F x dx a j x i j dx a i x i dx j=i 1 a j x i j dx (8) Teraz okazje się, że można jż zakończyć odrębne traktowanie przypadk i = j. Brak dwójki, wynikający z tego, że ten wyraz występje tylko raz, został nadrobiony przy liczeni pochodnej (a i występowała w kwadracie). Możemy więc teraz trzy ostatnie wyrazy wciągnąć pod jedną smę: = a i x i F x dx a j x i j dx (9) Jeżeli teraz przyrównamy tę pochodną cząstkową do zera, to dostaniemy zwykłe równanie liniowe o niewiadomych a 0... a. Wbrew pozorom całki będą to zwykłe stałe, czyli współczynniki równania. Tak czy inaczej trzeba je jednak policzyć. Całki pod smą są trywialne do policzenia. ajpierw korzystamy z: astępnie z właściwości całki oznaczonej: x n dx= xn 1 n 1 (10) b jeżeli f x dx=g x to a f x dx=g b g a (11)
Łatwość policzenia pierwszej całki natomiast zależy od postaci F(x). Jeżeli jest łatwo to można policzyć analitycznie całkę nieoznaczoną i tak, jak poprzednio, skorzystać z (11). Jeżeli natomiast całka jest wredna to można spokojnie policzyć jej wartość jedną z metod nmerycznych, oczywiście pamiętając o wymaganej precyzji. Po zaaplikowani (10) i (11) do (9) otrzymamy (pierwszą całkę zostawiłem nie rszoną): = a i x i F x dx i j 1 i j 1 a j =0 i j 1 Po przyrównani do zera otrzymjemy równanie liniowe z niewiadomymi, pierwsza całka (ta z F(x)) jest wyrazem wolnym. Możemy napisać takich równań (po jednym dla każdej pochodnej cząstkowej), w rezltacie dostaniemy liniowy kład równań z niewiadomymi. Rozwiązanie takiego kład dowolną metodą to jż banał. Macierzowo taki kład możemy zapisać następjąco: M A=F gdzie: A jest wektorem niewiadomych, A=[a 0... a ]. M jest macierzą współczynników o rozmiarze. Elementy tej macierzy dane są wzorem: M ij = i j 1 i j 1 i j 1 F jest wektorem wyrazów wolnych. Elementy tego wektora są dane wzorem: F i = x i F x dx Otrzymany kład równań rozwiązjemy dowolną metodą w wynik otrzymjąc współczynniki wielomian. Przykład Obrazy w formatach PGM i PPM (Portable GrayMap i Portable PixMap) żywają fnkcji korekcji gamma przy zapisie wartości pikseli w cel osiągnięcia większego zakres dynamicznego kolorów. Przy dekodowani obrazów w tych formatach należy każdy piksel (a w przypadk PPM każdą z trzech składowych kolor piksela) poddać korekcji odwrotnej. Fnkcja korekcji odwrotnej zdefiniowana jest następjąco: x, x 0, 0.0779863366857 F x ={0.30809661858 x 0.099 1.099., x 0.0779863366857, 1 } aszym zadaniem jest aproksymacja drgiego, potęgowego odcinka tej fnkcji z dokładnością adekwatną dla obrazków 8-bitowych. Dopszczalny błąd to pół przedział kwantowania kolor. Dla zakres 0 55 będzie to 1/510 = 1.96078431373 10-3. Wstępnie zaczniemy od trójmian kwadratowego. Macierz M będzie wyglądać następjąco:
m=[ 3 3 3 3 3 3 4 4 4 3 3 3 4 4 4 5 5 5 ]=[ 0.9013663314 0.496959065645 0.3331753446 0.496959065645 0.3331753446 0.4999075718 0.3331753446 0.4999075718 0.19999943071] =[ F F x dx xf x dx x F x dx]=[ 0.3444195 0.5353567 0.0168857] Wektor wyrazów wolnych natomiast ma poniższą postać: Rozwiązjąc ten kład równań otrzymamy: {a0=0.0168181 a 1 =0.0059331 =0.97390593} Tak więc ostatecznie aproksymjący trójmian ma postać: y = 0,97390953x + 0,0059331x + 0,0168181 iestety okazje się, że największa odchyłka jaką daje aproksymacja trójmianem, jest większa od dopszczalnej. Wykres fnkcji błęd będącej różnicą fnkcji oryginał f(x) i aproksymjącego wielomian W(x) znajdje się na następnej stronie. ajwiększa odchyłka wynosi 4,7 10-3 (na początk przedział) i jest to zdecydowanie za dżo wobec dopszczalnej 1,96 10-3. ależy więc wziąć wielomian wyższego rzęd, a więc trzeciego. W opisany jż sposób konstrjemy liniowy kład czterech równań z czterema niewiadomymi, którego postać ttaj pominę. Rozwiązjąc kład otrzymamy wielomian trzeciego rzęd: y=0,10738344 x 3 0,800705 x 0,0858785 x 0,00684798 Jego fnkcję błęd również znajdziemy na rysnk na następnej stronie, dla tego wielomian maksymalna odchyłka wynosi 4,7 10-4, a więc spełnia założenia zadania. Warto zaważyć, że aproksymacja wielomianem -tego stopnia ma dokładnie miejsc, w których fnkcja aproksymjąca pokrywa się z oryginałem, miejsca te są rozmieszczone symetrycznie względem środka przybliżanego przedział.
y 0.004 0.003 0.00 trójmian kwadratowy 0.001 0-0.001-0.00-0.003 0. 0.3 0.4 0.5 wielomian trzeciego 0.6 0.7 0.8 0.9 stopnia x -0.004 mgr inż. Grzegorz Kraszewski <krashan@teleinfo.pb.ed.pl>