sprawozdanie aproksymacja mathcad


Krzysztof Wesołowski
Automatyka i Robotyka
Grupa: środa, 14.00 - LD_3
Data: 22 XII 2008
Aproksymacja
Aproksymacja wielomianowa
Dane do obliczeń
Poni\ej przykładowy wetor punktów x i wartosci funkcji w tych pkt, i macierz
przechowujaca punkty w wierszach
-5.97
ł0 ł ł ł
ł1 ł ł ł
-2.63
ł ł ł ł
2 2.7
ł ł ł ł
ł3 ł ł ł
-6.49
ł ł ł ł
-3.54
ł4 ł ł ł
px := py := pxy := augment(px, py)
ł ł ł -25.1
ł
5
ł6 ł ł-24.79ł
ł ł ł ł
ł7 ł ł-45.42ł
ł8 ł ł-64.17ł
ł9 ł ł-79.55ł
ł łł ł łł
funkcja bedaca baza jednomianowa, wykorzystywana do obliczania wartosci funkcji w
punkcie x, dla nr_funkcji funkcji z bazy
nr_funkcji
bjm(x, nr_funkcji) := x
Funcja tworzaca macierz D, gdzie ilosc wierszy zalezy od ilosci punktow, zas ilosc
kolumn zalezy od oczekiwanej ilosci funkcji z bazy, ostatni argument to nazwa funkcji
sluzacych za baze (tutaj zostanie uzyta funkcja bjm)
D(ilosc, punkty, baza) := for w " 0.. rows(punkty) - 1
for k" 0.. ilosc - 1
wynikw, k ! baza
(punkty , k)
w, 0
wynik
I przezentacja jej dzialani dla wielomianu 3 stopnia (czyli 4 wymiarowa baza jednomianow),
i naszych 10 punktow
ł1 0 0 0 ł
ł1 1 1 1 ł
ł ł
1 2 4 8
ł ł
ł1 3 9 27 ł
ł ł
ł1 4 16 64 ł
D(4, pxy, bjm) =
ł ł
1 5 25 125
ł1 6 36 216 ł
ł ł
ł1 7 49 343 ł
ł1 8 64 512 ł
ł1 9 81 729 ł
ł łł
Funkcja obliczajaca wektor wspolczynnikow przy zadanej ilosci funkcji z bazy, punktach
oraz bazie funkcji:
w_wsp(ilosc, punkty, baza) := D ! D(ilosc, punkty, baza)
dtf ! DT"submatrix(punkty, 0, rows(punkty) - 1, 1, 1)
dtd ! DT D
lsolve(dtd, dtf )
ł-6.399ł
ł ł
7.461
ł ł
w_wsp(4, pxy, bjm) =
ł-2.236
ł
ł ł
0.055
ł łł
Funkcja obliczajaca wartosc funkcji aproksymujacej przy zadanej bazie i ilosci funkcji
bazowych (2funkcje bazowe => wielomina 1 stopnia), oraz danych punktach juz
zadancyh. Funkcja na swoje potrzeby wyznacza wektr wspolczynnikow.
f_apro(ilosc, punkty, baza, x) := wspolczynniki ! w_wsp(ilosc, punkty, baza)
ilosc-1
(wspolczynniki "baza(x, i))
" i
i = 0
ciag do rysownaia wykresu
ciag := 0, 0.01.. 9
I wykres funkcji aproksymujacej dla 1,2 i 3 stopnia wielomianu.
20
0
- 20
py
f_apro(2, pxy, bjm, ciag)
- 40
f_apro(3, pxy, bjm, ciag)
f_apro(4, pxy, bjm, ciag)
- 60
- 80
- 100
0 2 4 6 8 10
px, ciag
Poni\ej zamieszcam implementacje funkcji bazowych ortogonalnych Grama, ktore mozna
przekazac jako argument do funkcji aproksymujacej. ilosc wezlow dla wygody pozostawie
wpisana na szytwno.
wgr(argument, ktory) := k ! ktory
x ! argument
n ! 9
s-1
ł ł łłłł
ł ł śłśł
(x - i)
"
ł ł śłśł
k
ł(-1)s" k! " (k + s)! "if łs > 0, i = 0 , 1śłśł
"
ł s!"(k - s)! s!"k! ł s-1 śłśł
s = 0
ł ł śłśł
(n - i)
"
ł ł śłśł
i = 0
ł ł łł
Dla dowolnego argumentu, np 4.5 mozemy wiec obliczyc wartosc funkcji aproksymujacej
w nastepujacy sposób:
dla bazy jednomianowej, ilosc f bazowych to 2 czyli
f_apro(2, pxy, bjm, 4.5) = -25.496
wielomian pierwszego stopnia
dla bazy ortogonalnej
f_apro(2, pxy, wgr, 4.5) = -25.496
Macierz DTD zgodnie z oczekiwaniami jest diagonalna:
ł10 0 0 ł
ł ł
D(3, pxy, wgr)T"D(3, pxy, wgr) = 0 4.074 0
ł ł
0 0 3.667
ł łł
Zaś wektor wspolczynnikow jest rowny:
ł-25.496 ł
ł ł
w_wsp(3, pxy, wgr) = 38.456
ł ł
ł-17.982 łł
Poni\ej wykres funkcji aproksymujących, zgodnie z oczekiwaniami jest on identyczny,
gdy\ obie metody u\ywają wielominaów tego samego stopnia, a optymalny wśród nich
wybierany jest tą samą metodą.
20
0
- 20
py
f_apro(2, pxy, wgr, ciag)
- 40
f_apro(3, pxy, wgr, ciag)
f_apro(4, pxy, wgr, ciag)
- 60
- 80
- 100
0 2 4 6 8 10
px, ciag
Zaimplementuje teraz funkcje obliczająca odchylenie standardowena podstawie 2
wektorów punktów, punktów funkcji aproksymujacej i punktow rzeczywistych
last(v_apr)
2
ł łł
(v_apr - v_reali)
" i
ł ł
i = 0
od_std(v_apr, v_real) :=
last(v_apr) + 1
Ponizej obliczenia dla tego, konkretnego przypadku, majace na celu optymalne dobranie
stopnia wielomianu aproksymujacego na podstawie poprawiania sie dokladnosci
aproksymacji, za ktorej miare przyjmuje odchylenie standardowe.
Wektor wartosci dla wielomianiu danego stopnia:
apr(stopien) := for i " px
wyniki ! f_apro(stopien + 1, pxy, wgr, i)
wynik
i kolejne odchylenia standardowe:
0
0 0
1 11.543
2 3.833
3 3.71
4 3.7
for i " 1.. 10 =
5 3.67
wyniki ! od_std(apr(i) , py)
6 3.489
wynik
7 3.487
8 3.487
9 6.28710-15
10 4.21710-14
Jak widać odchylenie maleje przy przejsciu z stopnia 1 na drugi, kolejne poprawy sa
pomijalne, a\ do momentu osiagniacia stopnia 9, gdzie to aproksymacja staje sie
interpolacja a odchylenie jest wywolane bledem maszynowym
Aproksymacja trygonometryczna
Funkcja ktora zaburzamy i ktora bedziemy przyblizac.
ł2x Ą ł
tryg_func(x) := sin(x) + sin +
ł ł
4
ł łł
Ilosc argumentow ktore uznamy za dane, z przedziału o 0 do 2Ą, zakladam ze funkcja
ma okres bedacy wielokrotnoscia 2Ą, przez co takie punkty sa wystarczajace i na tym
przedziale funkcj mozna aproksymowac dokladnie
ilosc_argumentow := 8
Wektory argumentow i wektory danych wartosci funkcji:
tx := for i " 0.. ilosc_argumentow - 1
2Ą"i
wyniki !
ilosc_argumentow
wynik
ty := for i " 0.. ilosc_argumentow - 1
wyniki ! tryg_func + rnd(1) - 0.5
(tx)
i
wynik
0 0.208
ł ł ł ł
ł0.785ł ł ł
1.108
ł ł ł ł
0.378
ł1.571ł ł ł
ł2.356ł ł ł
-0.15
tx = ty = txy := augment(tx, ty)
ł3.142ł ł ł
1.03
ł ł ł ł
3.927
ł ł ł-0.326
ł
ł4.712ł ł-1.497ł
ł ł ł ł
-1.61
ł5.498łł ł łł
Teraz stworze 2 funkcje, ktore dla podanego stopnia (ilosc par funkcji trygonometrycznych
ktorych uzyjemy) utworza nam wektory wspolczynnikow, dla cos i sin.
t_wsp_a(st) := N ! ilosc_argumentow
for j " 0.. st
N-1
2 2Ą j"i
łty "cosł łł
wynikj ! "
ł ł łł
" i
N N
ł ł łłłł
i = 0
wynik
t_wsp_b(st) := N ! ilosc_argumentow
for j " 0.. st
N-1
2 2Ą j"i
łty "sinł łł
wynikj ! "
ł ł łł
" i
N N
ł ł łłłł
i = 0
wynik
Wlasciwa funkcja aproksymujaca:
st
1
t_apro(x, st) := t_wsp_a(st)0 +
(t_wsp_a(st) cos(j"x) + t_wsp_b(st)j"sin(x"j))
" j
2
j = 1
Ciąg argumentów dla wykresu:
tciag := 0, 0.01.. 2Ą
Oraz wykres prezentujacy po kolei: punkty ktorych uzywamy w aproksymacji, funkcja
ktora na dobra sprawe jest tutaj aproksymowana, oraz kolejne aproksymacje, z rozna
iloscia harmonicznych.
2
1
ty
tryg_func(tciag)
t_apro(tciag, 1)
t_apro(tciag, 2)
0
t_apro(tciag, 3)
t_apro(tciag, 4)
- 1
- 2
0 2 4 6 8
tx, tciag
Funkcja obliczajaca wartosci funkcji aproksymujacej w punktach wezlowych w zaleznosci
od ilosc funkcji trygonometrycznych bazowych:
tapr(stopien) := for i " 0.. ilosc_argumentow - 1
wyniki ! t_apro , stopien
(tx )
i
wynik
Oraz wektor odchyleń standardowych:
ł0.644ł
ł ł
0.2
ł ł
for i " 0.. 3 =
ł ł
0.137
wyniki ! od_std(tapr(i + 1) , ty)
ł0.137ł
ł łł
wynik
Jak widać najwiekszy zysk dokladnosci otrzymujemy przy zmianie stopnia z 1 na 2.
Pomimo ze dalej mozna to odchylenie jeszcze zmniejszyc, to na wykresie widac \e
zdecydowanie najlepiej wykorzystać wiedze o tym jakiego "stopnia" jest poszukiwana
funkcja. Wynik ten mo\na te\ delikatnie zmienic, u\ycie Crl+F9 do przeliczenia arkusza
wylosuje nowe zaburzenia.


Wyszukiwarka

Podobne podstrony:
Mathcad Laborki K1 MG
sprawozdanie felixa2
Sprawozdanie Konduktometria
zmiany w sprawozdaniach fin
Errata do sprawozdania
2009 03 BP KGP Niebieska karta sprawozdanie za 2008rid&657
Sprawozdanie nr 3 inz
Sprawozdanie FundacjaBioEdu2007
Sprawozdanie Ćw 2
sprawozdanie 4

więcej podobnych podstron