Laboratorium 6
Transkrypt
Laboratorium 6
Metody numeryczne Laboratorium 6 – Miary dopasowania funkcji aproksymującej Funkcja polyfit() W = polyfit (x, y, n) Funkcja przyjmuje dwa wektory punktów: x i y. Powinny mieć taką samą liczbę elementów. n określa stopień wielomianu, który ma te podane punkty aproksymować. Zwracany wektor W zawiera współczynniki przy odpowiednich potęgach zmiennej x od największej zaczynając. Czyli dla instrukcji: W = polyfit(x,y,2); %% parabola, krzywa 2-go stopnia wektor W zawiera 3 elemeny, współczynniki wielomianu W(x)=w1x2+w2x+w3 gdzie w1=W(1), w2=W(2), w3=W(3). Przy n=2 wektor W będzie miał 3 elementy. Funkacja polyval() Y = polyval (W, x) Funkcja liczy wartość wielomianu określonego współczynnikami W w punktach podanych w wektorze x. Wynik zapisuje do wektora Y. Czyli po prostu liczy wartości Y=W(x). Przykład: x=[1 2 3 4]; y=[1 4 8 15]; n=length(x); W = polyfit(x,y,1); %% aproksymacja wielomianem 1-go stopnia, linia prosta wy = polyval(W,x); %% wy to wartości funkcji według wielomianu W dla wektora punktow x %% rysowanie punktow oryginalnych (x,y) czyli funkcji F(x) %% oraz tych otrzymanych z wielomianu aproksymacyjnego W(x) plot(x,y,'*',x,wy,'-+'); %% najpierw punkty zrodlowe (x,y), potem punkty (x,wy) %% x1=0:0.1:5; y1=polyval(W,x1); plot(x,y,'*',x,wy,'-+', x1,y1); Zadania Danych jest sześć punktów: p1 (1, 1), p2 (2, 5), p3 (3, 8), p4 (4, 17), p5 (5, 25), p6 (6,32) 1. Napisać skrypt, który wykorzystując funkcję polyfit() dla podanych 6 punktów znajdzie wielomian aproksymacyjny 1-go stopnia (prosta), narysować punty p1, ..., p6 oraz funkcję W(x) aproksymującą podane punkty. Przetestować działanie skryptu dla wszystkich możliwych stopni wielomianu aproksymacyjnego czyli (dla 6 punktów) od 0 do 5. Zerowy stopień wielomianu jest po prostu średnią arytmetyczną. 2. Napisać skrypt, który dla znalezionego wielomianu W(x) 3-go stopnia obliczy wymienione miary dopasowania (czyli różne rodzaje błędów aproksymacji) funkcji aproksymującej W(x) do wartości współrzędnych y zadanych punktów. Miary dopasowania funkcji aproksymującej (następna strona): • błąd bezwzględny, • błąd kwadratowy, • średni błąd procentowy, • pierwiastek średniego błędu kwadratowego. Skrypt powinien wyświetlać wartości tych błędów z jakimś opisem, który błąd jest który. Nie trzeba rysować wykresów w tym zadaniu. 3. Napisać skrypt, który wyświetli błędy z zadania 2 dla wszystkich stopni wielomianu aproksymacyjnego, od 0 do 5. Wyświetlone informacje powinny dawać obraz zmniejszającego się błędu dla coraz wyższego stopnia wielomianu W(x). 4. Korzystając z rysowania blędów na wykresach w Octave: %% %% %% %% hold on errorbar(x,wy,abs(y-wy),"~"); %% bledy na y errorbar(x,wy,abs(y-wy),"#~k"); %% bledy tez na y ale w kolorze r hold of narysować punty p1, ..., p6, funkcję W(x) aproksymującą podane punkty oraz paski błędów (funkcja errorbar(), pokazujące zakres błędu dla każdego z punktów, dla których wyznaczona wielomian aproksymujący. 5. Wykorzystując funkcję interp1() wykonać interpolację podanych na początku strony 6 punktów oraz narysować te punkty wraz z funkcją je interpolującą. Przetestować interpolację dla metod: 'linear', 'nearest' oraz 'spline'. Porównać z interpolacją otrzymaną za pomocą funkcji polyfit(). Błędy, albo miary dopasowania :) ϵ i= y i−W ( xi ) ϵ i to różnica między współrzędną yi zadanego punktu, a wartością wyi =W(xi) czyli wartością wielomianu aproksymującego W(x) w i-tym punkcie. n n i=1 i=1 Błąd bezwzględny: BB=∑∣y i −W (x i)∣=∑ ∣ϵi∣ n n i=1 i=1 Błąd kwadratowy (suma błędów kwadratowych - SSE): BK =∑ ( yi −W (x i ))2=∑ (ϵ i)2 Średni błąd procentowy: SBP= n y i−W ( x i) 1 ⋅100 % czyli średni błąd względny * 100% ∑ n i=1 yi ∣ ∣ n n 1 1 Średni błąd kwadratowy (MSE): SBK = ⋅∑ ( y i−W ( x i))2= ⋅∑ (ϵi )2 n i=1 n i=1 √ n √ n 1 1 Pierwiastek średniego błądu kwadratowego (RMSE): σ F = ⋅∑ ( y i−W ( xi ))2 = ⋅∑ (ϵ i)2 n i=1 n i=1 Inaczej odchylenie standardowe, może być też dzielenie przez n-1 zamiast przez n.