TANA18/20 mars 2015 LAB 3. INTERPOLATION 1 Inledning Vi ska studera problemet att interpolera givna data med ett polynom och att interpolera med kubiska splinefunktioner, s(x), som är styckvisa polynom. 1.1 Innehåll Du ska 1. använda MATLAB för att interpolera givna data med ett polynom 2. studera skillnaden mellan en given funktion och en interpolerande spline 3. göra experiment för att praktiskt bestämma noggrannhetsordningen p 4. formge bokstaven S med kubisk splineinterpolation 2 Interpolation med polynom Vi vill interpolera följande punkter med ett polynom. Uppgift 2.1 Polynominterpolation x 1.0 1.5 2.0 2.5 y 2.6 3.4 0.7 0.8 Använd polyfit och polyval för att interpolera tabellen med ett trejdegradspolynom, P 3 (x). Plotta det och givna data och kontrollera att det går genom de givna datapunkterna. Ange P 3 (x). P 3 (x) = Uppgift 2.2 Andragradspolynom Använd polyfit och polyval för att anpassa ett andragradspolynom, P 2 (x) till data. Plotta det och avgör vad polyfit gav i detta fallet. 3 Splineinterpolation 3.1 Problembeskrivning För att entydigt bestämma en interpolerande splinefunktion krävs två ändpunktsvillkor. Vi ska mer i detalj undersöka två olika val av ändpunktsvillkor. s (a) = s (b) = 0 (naturliga ändpunktsvillkor). Detta motsvarar den mekaniska tillämpningen med en böjlig ribba (en så kallad ri på svenska eller spline på engelska) som går igenom de givna interpolationspunkterna. Ribban antar då en form som minimerar den potentiella energin. Man kan matematiskt visa att denna form approximativt överensstämmer med en kubisk spline med naturliga ändpunktsvillkor. 1
s (a) och s (b) väljes fritt. Om vi känner derivatorna i x = a och x = b väljs förstås s (a) = f (a) och s (b) = f (b). Dessa kallas rätta ändpunktsvillkor. Vi ska se hur valet av ändpunktsvillkor påverkar felet vid interpolationen. Vi kommer att begränsa oss till det ekvidistanta fallet där alltså x i+1 x i = h = konstant. Därför kommer antalet delintervall, n, att bestämma steglängden h = (b a)/n. Vi ska även undersöka hur felet vid spline-interpolation beror av steglängden h. 3.2 Ändpunktsvillkorens inverkan Låt f(x) vara den funktion som ska interpoleras. Vi ska undersöka felets beroende av de valda ändpunktsvillkoren. Som testfunktion användes polynomet Uppgift 3.1 f(x) = 4 3 x4 4 3 x3 + 1 2 x2 på intervallet [ 0,1 ]. Beräkna f (0) och f (1). Dessa värden behövs då rätta ändpunktsvillkor ska användas. Beräkna även f (0) och f (1). f (0) = f (1) = f (0) = f (1) = Vi ska interpolera f(x) på intervallet [0,1] med en kubisk splinefunktion och använda h = 0.1, dvs 10 delintervall. För att utföra splineinterpolation ska MATLAB-rutinen csape användas. Den anropas enligt pn=csape(x,y, variational ) Då beräknas den naturliga spline som interpolerar tabellen x, y. För rätta randvillkor är motsvarande anrop pr=csape(x,y, complete,[yprima,yprimb]) där yprima, yprimb är numeriska värden på randvärdena. För att beräkna värdet av splinefunktionen används MATLAB-rutinen fnval. Man kan t.ex skriva (om resultatet också ska ritas), plot(xx,fnval(pn,xx)) för att plotta den naturliga splinefunktionen i punkterna xx= 0 : 0.01 : 1 (t.ex.). Uppgift 3.2 Interpolation med splines Skriv en funktionsfil fun.m eller skapa en anonym funktion i kommandofönstret med funktionen: fun=@(x) 4/3*x. 4-4/3*x. 3+x. 2/2 Skapa x=0:0.1:1 och y=fun(x) samt xx=0:0.01:1. Beräkna pn och pr enligt ovan och plotta splinefunktionerna samt använda data: plot(xx,fnval(pn,xx),xx,fnval(pr,xx),x,y, o ) Kan man se någon skillnad på kurvorna? För att tydligare se hur felet uppför sig, rita felkurvor istället: abs(fnval(pn,xx)-fun(xx)) med naturliga och rätta ändpunktsvillkor i olika bilder. Gör en skiss av bilderna. 2
Uppgift 3.3 Studera felkurvorna och besvara följande frågor. Det syns tydligt att felen är noll i noderna, dvs i kanten på varje delintervall. Ungefär var i delintervallen är felen störst? Vilken typ av ändpunktsvillkor ger genomgående de största felen och i vilket intervall erhölls maximala absoluta felet? Betrakta splinefunktionen med naturliga randvillkor. Ge en förklaring till felens variation, dvs förklara varför felen blir störst i kanterna och varför vi får olika stora fel i början och i slutet? (Ledning: Jämför andraderivatornas värden i början och slutet.). 3.3 Steglängdens inverkan En annan faktor som påverkar felet är antalet interpolationspunkter, som motsvaras av en viss steglängd h. Ju mindre steg (fler delintervall) desto mindre bör felet bli. Men hur avtar felet med avtagande steg? Använd csape för att utföra följande uppgifter. Uppgift 3.4 Datorexperiment med naturliga ändpunktsvillkor Använd naturliga ändpunktsvillkor och beräkna felen i mittpunkten av delintervallen, dvs använd x=0:0.1:1 och xx=0:0.05:1 då antalet delintervall ska vara lika med 10. Titta speciellt på det första delintervallet, ett intervall i mitten och det sista delintervallet. Fyll i beloppet av de absoluta felen i tabellen. Upprepa samma sak med antalet delintervall lika med 20 och 40. antal steglängd fel i fel i fel i i intervall h i första intervallet centrala intervallet sista intervallet 1 10 2 20 3 40 Uppgift 3.5 Tolkning av resultaten Med hjälp av resultaten ovan kan man experimentellt bestämma hur felet beror av steglängden h i de olika fallen. Felet, som är ett trunkeringsfel, eftersom beräkningsfelen kan försummas, är nämligen ungefär proportionellt mot h p, dvs R T ch p, där p bestämmer metodens noggrannhetsordning och c är oberoende av steglängden, h, men beror på x och på funktionen. Vi kan bestämma p på ett enkelt sätt genom att bilda kvoterna (sätt in R T (h) ch p och förkorta i uttrycket): R T (h i ) R T (h i /2) = 3
Uppgift 3.6 Felkvoter För in felkvoterna i tabellen nedan. första centrala sista ändpunktsvillkor i h i /h i+1 intervallet intervallet intervallet Naturliga 1 Bestäm nu p (heltal) och för in detta i tabellen. 2 första centrala sista ändpunktsvillkor intervallet intervallet intervallet Naturliga 3.4 Noggrannhetsordningen, p Det teoretiska uttrycket för trunkeringsfelet (se boken, Sats 5.10.6, sid. 139) säger att max s(x) f(x) < a x b c h4, c är en konstant där s(x) är en kubisk spline som interpolerar f(x) med rätta randvillkor. Uppgift 3.7 Slutsatser För vilket/vilka intervall ger den praktiska undersökningen av trunkeringsfelet med naturliga ändpunktsvillkor samma värde på p som teorin för rätta randvillkor anger? 3.5 Steglängdsval Med hjälp av resultaten i experimenten ovan kan en approximativ konstant c beräknas för varje delintervall. (Minsta h ger bästa approximation.) Uppgift 3.8 Beräkna steglängd Vilken steglängd ska man använda, då vi med den naturliga splinefunktionen vill ha trunkeringsfelet mindre än 10 5 på hela intervallet? Använd resultaten ovan och beräkna den steglängd, som ger ett största trunkeringsfel 10 5. Redovisa beräkningarna. h = vilket ger intervall. Uppgift 3.9 Testning Använd den framräknade steglängden (=1/antalet intervall) för att kontrollera noggrannheten. Hur stort blir det största trunkeringsfelet? 4
4 Tillämpningsexempel Matematisk typografi, dvs matematisk beskrivning av formen hos bokstäver och siffror har en lång tradition. Donald Knuth har skrivit en intressant artikel i ämnet (finns i hans bok TEX och METAFONT från 1979). Enligt Knuth är bokstaven S den svåraste att forma. Uppgiften består i att formge bokstaven S med kubisk splineinterpolation. 4.1 S-kurvan Uppgift 4.1 Handrita ett S Handrita först ett S på rutat papper. Välj exempelvis ut 7 punkter från den handritade kurvan och lagra dess x och y koordinaterna i två vektorer x och y. Välj punkterna så att avståndet, längs S-kurvan, dem emellan är ungefär lika. Här måste parametriska splines användas, dvsx = x(t) ochy = y(t) är funktioner av en monotont växande parameter t. Välj t = 1 i startpunkten och låt sedan t anta värdena 2,3,...,7. Uppgift 4.2 Bestäm en naturlig kubisk spline som interpolerar x-värdena och en som interpolerar y-värdena. Använd sedan en vektor tt=1:0.1:7 för att plotta resultatet, t.ex. plot(fnval(pnx,tt),fnval(pny,tt)), axis equal (Kommandot axis equal skalar axlarna lika och måste anges efter varje plottning). Ändra ev. indata och kör igen tills du blir nöjd med resultatet. Plotta även de utvalda 7 punkterna som stjärnor i figuren. Uppgift 4.3 Använd istället splineinterpolation med rätta randvillkor för att beräkna x(t) och y(t). Experimentera med olika start- och slut-lutningar hos kurvorna x(t) och y(t) så du får ett snyggt S. Plotta gärna tillsammans med det naturliga S:et. Redovisa dina data i tabellen: t 1 2 3 4 5 6 7 x(t) y(t) Snyggast blev det med x (1) = y (1) = x (7) = y (7) = 5