F HT BE & Page of 6 PP C 5 pp 7 ff Integraler Uppgiften är att beräkna b I f ( ) d a med tillgång till värden på f: vi anser att vi kan evaluera f för alla i (a,b) o använder kvadraturformler av typen n I w j f ( j ) j w j är vikter o j kallas abskissor. Man beöver formler okså för generaliserade integraler där t e b eller där f ar integrabla singuariteter, t e f ( ) d För ändliga intervall kan vi konstruera sådana formler genom att. Välja j. Interpolera ( j,f( j )) med ett polynom av gradtal <= n (det finns bara n+ abskissor) Man gör det genom att bestämma w j så att formeln blir eakt för alla polynom av gradtal < n+. Man kan beöva formler okså för generaliserade integraler där t e b eller där f ar integrabla singulariteter, t e f ( ) d men det får anstå till senare kurs. Eempel Newton-Cotes formler b a utgår från ekvidistanta abskissor, j a j, j,,..., N n Trapetsregeln n = ger w = w = (b-a)/. Linjär interpolation ger f ( ) f ( ) ( a) ( a)( b) o felet kan överskattas I ( f ( a) f ( b)) b ma f ( a, b) a ( a)( b) d ma ( a, b) f ( b a) Eempel: Gregorys formel Som eempel på koeffiientbestämning visar vi en formel med fyra vikter, eakt för polynom P av gradtal < 4. Vi kan ta intervallet [,] utan inskränkning o får sedan formler för [a,b] genom translation o skalning. Symmetrin minskar antalet obekanta vikter till två: P( ) d w ( P() P( )) w ( P( / ) P( / )) P = : w + w = P = : w + w / + w / + w = /: w + w = / inget nytt så P = : w + w /9 + w 4 /9 + w = /: w + w 5/9 = / w = /8, w = /8
F HT BE & Page of 6 P = : /8( + ) + /8( /7 + 8 /7) = 4 (/8 + /7 + /9) = 4 /4, eakt men för fjärdegradspolynom blir det ett fel, P = 4 : /8( + 4 ) + /8( 4 /8 + 6 4 /8) = 5 (/8 + /(8. 7) + /7) = 47 5 /78 medan integralen blir 5 /5. Upprepad Trapetsregel Om vi ar en tabell ( i,f i ),i =,,.,N, = a, N = b, kan trapetsregeln användas för varje delintervall ( i, i+ ): N f ( ) d N ( j j ) ( f j f j ) j Denna formel implementeras av MATLABs trapz funktion. trapz =.5*sum(diff().*(f(:end-)+f(:end))); När punkterna är ekvidistanta, = i+ i, blir formeln N N f ( ) d T( ) f j / ( f fn ) j MATLAB: T = *(sum(f)-(f()+f(end))/); med fel begränsat av N ma f b a ma f I själva verket gäller att felet i trapetsregeln med ekvidistanta punkter är en potensserie med jämna potenser av, 4 6 I T( ) 4 6... o det kan man utnyttja till upprepad feltermskorrektion. Räkna med steglängd o Q (Q = vanligt) som ger I T() = I T(Q) = (Q) ˆ T( ) T( Q) 4 I T( ) T ( ) k4 k6 6... Q så man kan upprepa proessen utgående från T ˆ( ), Tˆ( Q). För upprepad stegfördubbling blir nämnarna i korrektionstermerna alltså, 5, 6, 55, Vi ar okså Euler-MLaurins summationsformel, b 4 T( ) f ( ) d ( f ( b) f ( a)) ( f ( b) f ( a) 7 a r (r ) (r ) r r ( f ( b) f ( a)) O( ) då 6 ( 4 ( v) f ( b) ( v) f ( a))...
F HT BE & Page of 6 som t e visar, att trapetsregeln är utomordentligt noggrann för integration av en periodisk funktion över ela perioden en generaliserad integral f ( ) d där f avtar myket snabbt då Vi provar det senare på e d. För räkningarna byter vi ut oändligeterna mot : N T() Fel ============================ 4.997 -.77e+ 8.744496 -.e+ 6.7586959 -.76e-.774585 -.785e- 64.774585.e-5 8.774585 -.55e-5 Eempel: Uppskatta A på tavlan. Den snabba konvergensen syns tydligt i ett loglogdiagram (nu medfaktorn e d mellan suessiva steglängder) F: Hur antera svårigeter som singulariteter i (eller nära) intervallet? Oändligt intervall? Singulariteter Man kan ibland substituera o få en integral utan singularitet. Som eempel tar vi Först konstaterar vi att singulariteterna i intervallets ändpunkter är integrabla: sin sin d / / sin sin(sin t) vi = sin t: d ostdt sin(sin t) dt ost / / o lim lim ( ) eisterar sin. Då provar d. Ett annat trik kan vara partiell integration. Vi provar på f ( ) d f ( ) f ( ) d Denna manöver ar förbättrat läget något, men som Euler-MLaurins formel visar, alla derivator blir oändliga i = om inte f () råkar vara noll, så kan vi inte förvänta oss fel av ordning med trapetsregeln. Vad det blir för fel kan vi undersöka med f() = där vi särbeandlar första intervallet: d d d / d, o trapet s - regeln ger /
F HT BE & Page 4 of 6 Första intervallet ger alltså fel O( / ). Hur blir det med övriga termer i felutveklingen? p ( k) Vi ar f ( ) med p / o f p )...( p k ) o för integralen från till kan vi tillämpa EM formel: T ( ) r r r r p r r d r r r p )...( p r )( p )...( p r ) p )...( p r ) pr p r r så felutveklingen inneåller alltså potenserna /,, 4, ) pk pr p )...( p r ) Räkningarna på eemplen följer alla samma mönster: man provar trapetsregeln med suessivt alverade steglängder, provar att göra feltermskorrektion (= Riardson-etrapolation), tittar på ur kvoten mellan suessiva skillnader (för säg, /, /4, ) beter sig o försöker bedöma om de ligger tillräkligt nära det teoretiska värdet (4 för fel, 6 för fel 4, et.) för att man ska kunna uppskatta felet med senaste korrektion, eller nästa. Dessutom görs jämförelse med MATLABs quadl, som enligt dokumentationen använder adaptiv Gauss-Lobatto-kvadratur. quadl använder för intervallet (-,) en fyra punkts Lobatto regel med (, / 5, / 5,), w (,5,5,)/6 som är eakt för femte-gradspolynom, dels dess sjupunkts Kronrod-formel med (, /, / 5,, / 5, /,), w (77,4,65,67,65,4,77)/47 som är eakt för niondegradspolynom. Poängen är att Kronrod-formeln bara kräver tre nya evalueringar av f. Skillnaden tas som uppskattning på felet. Adaptiv betyder att intervallet delas upp i suessivt mindre bitar tills feluppskattningen satisfieras; när ett intervall alveras alveras okså dess tillåtna fel så att summan av uppskattningarna för alla delintervall blir mindre än önskat fel. Programmet visas är: % E 6. lear all lf l figure() lf %format sort e = 'O56a'; e = '6b'; swit e ase '6a' a = ; b = ; fun = inline('e)./(+*.^)') ase '6b' a=+eps; b = pi; fun = inline('sin()./') ase '6b' a = ; b = pi/; fun = inline('log(+os(6*))') ase '64a' a = ; b = ; fun = inline('./(+.^4+sqrt(+.^))') ase '64b' a = ; b = ; fun = inline('./(+.^4+sqrt(+.^))') ase '69a' a = -.5; b = ; fun = inline('sqrt((- ).*(+*)).*(.^+.*+.)') ase '69knep'
integrand f F HT BE & Page 5 of 6 a = -pi/; b = pi/; fun = inline('sqrt()*(.75)^*os().^.*((.5+.75*sin()).^+.*(.5+.75*s in())+.)') ase 'O56a' a = ; b = -eps; fun = inline('os()./sqrt(-.^)') ase 'O56a' a = ; b = pi/; fun = inline('os(sin())') end nalv = 7; n = ; % number of subintervals ttab = []; tab = []; for alv = :nalv = linspae(a,b,n+); = ()-(); f = fun(); plot(,f,'.') label('') ylabel('integrand f'); old on T = *(sum(f)-.5*(f()+f(end))); ttab = [ttab,t]; tab = [tab,]; n = n*; end %===== etrapolate: ttabat = ttab(:end)+diff(ttab)/; ttabatat = ttabat(:end) + diff(ttabat)/5; dis' T T^ T^^') dis'---------------------------------------------') dis[tab' ttab' [ ttabat]' [ ttabatat]']) [q,fnt] = quadl(fun,a,b,e-5); dis['%==== quadl: nfun ',numstr(fnt),' Integral: ']) disq) figure() lf plot(tab,ttab,'o') old on plot(tab(:end),ttabat,'.') label('') ylabel('integral'); legend('t','tat') Resultatet av körning : d 4 T T^ T^^ ---------------------------------------------..894.5.6.844.5.5.94.88.5.748.9.98.65.876.98.98..98.98.98 5 4 9 8....4.5.6.7.8.9
integrand f F HT BE & Page 6 of 6.56.96.98.98.78.98.98.98 %==== quadl: nfun 8 Integral:.98 Här fungerar allt som tänkt, det räker med nio f-värden o två feltermskorrektioner för att få fyra deimaler korrekta. (men proessen fortsatte till 9 punkter) Sedan: d 4 9 T T^ T^^ ------------------------------------------ 8 9. 8.476 7 9.5 4.766 7.8566 6 4.75. 4.955.78.75.456 7.74 7.986 5.875 6.9 5.56 5.47 4.598 5.69 5.84 5.67.969 5.94 5.946 5.955.484 5.7 5.976 5.978 %==== quadl: nfun 8 Integral: 5.978 Även nu fungerar det som väntat, men det beövs 4 6 8 4 6 8 myket fler punkter eftersom integranden väer så fort vid =. Fyra deimaler först efter 9 punkter o två korrektioner