Rozdziª 6 Oblicznie cªek. Kwdrtury W tym rozdzile zjmiemy si zdniem obliczeni przybli»onego cªek postci: dl funkcji f, czy ogólniej: dl ρ dnej wgi. f(t) dt, f(t)ρ(t) dt, 6.1 Funkcj octve' qud() Do obliczni przybli»onego cªek jednowymirowych tzn. typu sªu»y funkcj octve': qud ( ) c = Jej njprostsze wywoªnie to: c=qud(fcn,, b ), f(t) dt gdzie, b to pocz tek i koniec odcink, F CN to wsk¹nik (uchwyt) do funkcji octve' postci: function y=f ( x ) 63
#komendy octve ' y =..... ; endfunction Je±li funkcj, której cªk chcemy obliczy jest ju» wcze±niej zdeniown, to uchwyt do niej zwrc opertor octve': @, np. uchwyt do funkcji sin zwróci komend: @sin. N pocz tek kilk prostych przykªdów cªek, które smi potrmy obliczy nlitycznie: cªk z sin(x) n [ 1, 1] qud( @sin, 1,1) Otrzymli±my zero - jk tego oczekiwli±my. π sin(x) dx = 2 0 qud( @sin, 0, pi ) Otrzymli±my wynik zgodny z oczekiwnimi. cªk z funkcji mªo regulrnej 1 0 t dt: c=qud( @sqrt, 0, 1 ) Sprwd¹my c 2/3, otrzymli±my ns = 2.2204e 16, czyli zero n poziomie bª du zokr gle«. Czy funkcj qud() zwsze dje dobre wyniki? Rozptrzmy prosty przykªd cªki z funkcji z prmetrem f ɛ (t) = ɛ 1 f1( t ɛ ) n [ 1, 1], por. rysunek 6.1, dl { 1 t x ( 1, 1) f1(t) = 0 w przeciwnym przypdku Cªk powinn by zwsze równ jeden. Zdeniujemy njpierw funkcj f1: 64
Rysunek 6.1: Wykresy funkcji dszek, tzn. f ɛ dl kilku wrto±ci prmetru ɛ. function y=f 1 ( x ) y=1 bs ( x ) ; y=y. ( y >0); endfunction c=qud( @f1, 1,1) Otrzymli±my jeden. Powtórzmy obliczeni dl ɛ = 10 k dl k = 1, 3, 5, 7: M=6; c=e p s i=zeros (M+1,1); e p s i (1)=1; for k=1:m, c ( k)=qud(@( x ) e p s i ( k ) f 1 ( e p s i ( k ) x ), 1,1); e p s i ( k+1)= e p s i ( k ) 1 0 ; endfor Od pewnego momentu obliczone przybli»eni cªek s równe zero zmist jeden. 65
Rysunek 6.2: Wykres ɛ 1 1 f ɛ(t) dt otrzymny z pomoc wywoªni qud(). Wychwy my ten moment dokªdniej. Powtórzmy obliczeni dl ɛ z [1e 3, 1e 2]. e p s i=linspce ( 1 0 0, 1 0 0 0, 3 0 0 ) ; M=length ( e p s i ) ; c=zeros (M, 1 ) ; for k=1:m, c ( k)=qud(@( x ) e p s i ( k ) f 1 ( e p s i ( k ) x ), 1,1); endfor plot ( epsi, c ) Jest to do± gwªtown zmin, por. rysunek 6.2. Dlczego tk jest? Oczywi±cie funkcj octve' qud(() mo»e obliczy przybli»enie cªki korzystj c z co njwy»ej sko«czonej ilo±ci wrto±ci funkcji n odcinku cªkowni. No±nik funkcji f ɛ jest brdzo mªy dl ɛ 1e 3 wzgl dem odcink cªkowni [ 1, 1], st d by mo»e wszystkie obliczone wrto±ci byªy równe zero. 66
Mo»n si domy±le,»e funkcje octve' dziªj n zsdzie czrnej skrzynki: podjemy prmetry do funkcji, dn funkcj, w tym przypdku qud() powinn zwróci przybli»enie cªki. Spróbujmy obliczy t cªk dziel c odcinek [ 1, 1] n mªe pododcinki i cªkuj c po nich tzn. f(t) dt = N 1 k=0 xk +h x k f(t) dt h = (b )/N; x k = + k h, k»d cªk x k +h x k f(t) dt mo»emy obliczy przy pomocy funkcji octve' qud(). e p s i =1000; N=100; h=2/n; xk= 1; g=@( x ) e p s i f 1 ( e p s i x ) ; c =0; for k=0:(n 1), c+=qud( g, xk, xk+h ) ; xk+=h ; endfor bs ( c 1) Otrzymli±my bª d bs(c 1) równy ns = 6.8505e 12, podczs gdy bs(qud(g, 1,1) 1) zwrc bª d równy jeden. Oczywi±cie znj c no±nik funkcji mo»emy policzy cªk po jej no±niku. Otrzymmy: e p s i =1000; g=@( x ) e p s i f 1 ( e p s i x ) ; c=qud( g, 1e 3,1e 3) bs ( c 1) Bª d jest równy ns = 1.1102e 16, czyli jest n poziomie bª du zokr gle«. Równie» dl funkcji o du»ej zmienno±ci, np. silnie oscyluj cych, funkcj octve' qud(() mo»e zwróci zªy wynik. Spróbujmy scªkow np. sin(999 x) n odcinku [0, π] i porównjmy z dokªdnym wynikiem π sin(999 x)dt = 1e 3 (1 cos(999 π)). 0 =999; g=@( x ) sin ( x ) ; c=qud( g,0, pi ) bs ( c (1/) (1 cos ( pi ) ) ) 67
Tu funkcj qud() wydrukowª n ekrnie ostrze»enie: ABNORMAL RETURN FROM DQAGP Wrto wspomnie,»e funkcj qud() oblicz równie» cªki po odcinkch nieogrniczonych. Z wrto±ci, b w wywoªniu qud(f,,b) mo»emy przyj inf lub odpowiednio inf, np. mo»emy scªkow funkcj exp( x2 ) po cªej 2 prostej rzeczywistej, czy jkiej± póªprostej: g=@( x ) exp( 0.5 x x ) ; c1=qud( g, i n f, 0 ) c2=qud( g, 0, i n f ) c3=qud( g, i n f, i n f ) c3 c1 c2 Czy wynik jest zgodny z oczekiwnimi? 6.2 Kwdrtury zªo»one Oczywi±cie w octve'ie mo»emy zimplementow njprostsze kwdrtury zªo»one, np. njprostsz kwdrtur zªo»on : f(t) dtp N (f) b N N f( + k h) k=1 Implementcj w octve'ie tej kwdrtury to: function c=prostkw ( f,, b,n=300) #kwdrtur prostoktow prwostronn #Input :, b, konce p r z e d z i l u clkowni #N i l o s c punktow domyslnie 100 #f wskznik do f u n k c j i # z w r c j c e j wektor w r t o s c i d l wektor dnych #Output : c p r z y b l i z e n i e c l k i h=(b )/N; x=(1:n) h ; y=f ( x ) ; c=h sum( y ) ; endfunction Przetestujmy t kwdrtur. N pocz tku n jednominch: prostkw (@( x ) x,0,1) 0.5 prostkw (@( x ) x. x,0,1) 1/3 68
Wynik jest poprwny. Je»eli zwi kszymy N, to by mo»e uzyskmy lepszy wynik: prostkw (@( x ) x,0,1,1000) 0.5 prostkw (@( x ) x. x,0,1,1000) 1/3 Bª d jest n poziomie 10 4. Dl funkcji klsy C 1 ([, b]) bª d mo»n oszcow przez f(t) dt P N f f,[,b] h = O(N 1 ), przy czym dl funkcji f(x) = x w tym oszcowniu widzimy równo±. Mo»n pokz,»e dl dosttecznie gªdkiej funkcji zchodzi: f(t) dt P N f = f (ξ)h dl pewnego punktu ξ (, b), dl brdziej regulrnych funkcji dl pewnej ujemnej stªej C. f(t) dt P N f = Ch + O(h 2 ) N h E N E N /E N/2 10 1.00e-01 5.17e-02 0.00000 20 5.00e-02 2.54e-02 2.03279 40 2.50e-02 1.26e-02 2.01653 80 1.25e-02 6.28e-03 2.00830 160 6.25e-03 3.13e-03 2.00416 320 3.13e-03 1.56e-03 2.00208 640 1.56e-03 7.82e-04 2.00104 1280 7.81e-04 3.91e-04 2.00052 Tblic 6.1: bdnie rz du kwdrtury P N f dl cªki z funkcji f(x) = x 2 n [0, 1]. Bª d E N = 1 0 f P Nf. Przetestujmy terz t kwdrtur dl ustlonej nlitycznej funkcji f i podwjnych wrto±ci N, tzn. obliczymy P N f dl N = N 0, 2 N 0,... i nst pnie policzymy: dl E k = f(t) dt P 2 k N 0 f. E k = C h + O(h2 ) E k+1 C h/2 + O(h 2 ) 2, 69
N h E N E N /E N/2 10 3.14e-01 1.65e-02 20 1.57e-01 4.11e-03 4.00495 40 7.85e-02 1.03e-03 4.00123 80 3.93e-02 2.57e-04 4.00031 160 1.96e-02 6.43e-05 4.00008 320 9.82e-03 1.61e-05 4.00002 640 4.91e-03 4.02e-06 4.00000 1280 2.45e-03 1.00e-06 4.00000 Tblic 6.2: bdnie rz du kwdrtury P N f dl cªki z funkcji f(x) = sin(x) n [0, π]. Bª d E N = π 0 f P Nf. N=10; M=8; #c=2; #znn wrtosc c l k i e =0; for k=1:m, kw=prostkw ( f,, b,n) ; ep=e ; e=bs ( c kw ) ; printf ( "[%d ] e=%g ep/e=%6.5 f \n",n, e, ep/e ) ; N =2; endfor Wyniki dl funkcji f(x) = x 2 i odcink [0, 1] s zwrte w Tbeli 6.1, dl funkcji sin(x) i cªki z odcink [0, π] w Tbeli 6.2. Dlczego dl sin(x) wyniki wskzuj n bª d E N O(h 2 )? N h E N E N /E N/2 10 1.00e-01 4.17e-02 20 5.00e-02 2.09e-02 1.99085 40 2.50e-02 1.05e-02 1.99544 80 1.25e-02 5.25e-03 1.99772 160 6.25e-03 2.63e-03 1.99886 320 3.13e-03 1.31e-03 1.99943 640 1.56e-03 6.57e-04 1.99972 1280 7.81e-04 3.29e-04 1.99986 Tblic 6.3: bdnie rz du kwdrtury P N f dl cªki z funkcji f(x) = sin(x) n [0, 1]. Bª d E N = 1 0 f P Nf. 70
Zmie«my odcinek n [0, 1] i wyniki b d zgodne z oczekiwnymi, por. Tbel 6.3. 6.3 Normy cªkowe Zstnówmy si, jk w sposób przybli»ony wyznczy norm typu L p n odcinku [, b] dl zdnej funkcji f(x) zdeniownej w octve'ie jko function y=f ( x ) Spróbujmy zdeniow funkcj octve', któr korzystj c z qud() wyznczy przybli»enie normy f L p (,b) = dt) ( 1/p. f(t) p Jko prmetry tej funkcji chcemy podw wsk¹nik do funkcji typu y=f(x), p, orz ko«ce odcink [, b]. eby wywoª funkcj qud() musimy pod funkcj octve' jednorgumentow x f(x) p jko pierwszy rgument. Trzeb j odpowiednio zdeniow wewn trz nszej funkcji. Njwygodniejszym sposobem jest u»ycie mechnizmu funkcji nonimowej, por Rozdziª 3.2.1: fp=@( x ) ( bs ( f ( x ))^p ; oczywi±cie p musi by wcze±niej zdeniowne. Tk wi c mo»n by npis t funkcj nst puj co: function n=lpnorm( f,, b, p=2) fp=@( x ) bs ( f ( x ))^p ; n=qud( fp,, b ) ; n=n^(1/p ) ; endfunction Sprwd¹my dl p = 2 i prostych funkcji np.: Lpnorm(@( x ) 1,0,1) 1 Lpnorm(@( x ) x,0,1) 1/ sqrt ( 3 ) Lpnorm( @cos, 0, pi) sqrt ( pi /2) Wyniki s poprwne. Mj c zimplementown tk funkcj, mo»emy np. przeprowdzi bdnie rz dów zbie»no±ci interpolcji spljnowej w normie L 2, zmist w normie mksimum, tk jk w Rozdzile 5.4. 71