TANA09 Föreläsning 7 Interpolation Interpolationsproblemet. Introduktion. Polynominterpolation. Felanalys. Runges fenomen. Tillämpning. LED display. Splinefunktioner. Spline Interpolation. Ändpunktsvillkor. Feluppskattning. Exempel. 8 december 2014 Sida 1 / 20
Interpolation Antag att vi har en tabell x x 1 x 2... x n+1 f(x) f 1 f 2... f n+1 Hur skall vi uppskatta f(x) för x 1 x x n+1? Definition Ett polynom p(x) interpolerar en funktion f(x) i punkterna x 1, x 2,..., x n+1, om p(x i ) = f(x i ), i = 1, 2,...,n+1. Frågor Polynomets gradtal? Hur skall polynomet beräknas? Feluppskattning? 8 december 2014 Sida 2 / 20
Linjär Interpolation f(x) f 1 f 2 p 1 (x) x 1 x 2 Sats Det förstagrads polynom p 1 (x) som interpolerar två punkter (x 1, f 1 ) och (x 1, f 2 ) ges av p 1 (x) = f 1 + x x 1 x 2 x 1 (f 2 f 1 ). 8 december 2014 Sida 3 / 20
Felanalys vid Linjär Interpolation Lemma Antag att felen i använda funktionsvärden f 1 och f 2 uppfyller f i ε. Det resulterande felet då linjär interpolation används kan uppskattas R XF ε. Sats Antag att p 1 (x) är det linjära polynom som interpolerar en funktion f(x) i punkterna x 1 och x 2. Då gäller R T = f(x) p 1 (x) = f (ξ) 2 (x x 1)(x x 2 ), där x 1 < ξ < x 2. eller R T Ch 2, där h = x 2 x 1. 8 december 2014 Sida 4 / 20
Polynom Interpolation Sats Antag att vi har n+1 punkter (x i, f i ). Vi kan då bestämma ett unikt polynom p n (x) av grad n som interpolerar de givna punkterna, dvs p n (x i ) = f i, i = 1, 2,..., n+1. Sats Låt p n (x) vara det polynom av gran n som interpolerar f(x) i punkterna x 1, x 2,...,x n+1. Då gäller f(x) p n (x) = f(n+1) (ξ(x)) (x x (n+1)! 1 ) (x x n+1 ). Funktionen f(x) måste ha tillräckligt många kontinuerliga derivator. Hur skall räkningarna organiseras? 8 december 2014 Sida 5 / 20
Newtons Interpolationsformel Hitta ett polynom p n (x) som interpolerar värdena i tabellen Vi gör ansatsen x x 1 x 2... x n+1 f(x) f 1 f 2... f n+1 p n (x)=c 0 +c 1 (x x 1 )+c 2 (x x 1 )(x x 2 )+...+c n (x x 1 ) (x x n ). Interpolationsvillkoren ger då och p n (x 1 ) = c 0 = f 1, p n (x 2 ) = c 0 + c 1 (x 2 x 1 ) = f 2,= c 1 = (f 2 c 0 )/(x 2 x 1 ). Varje nytt villkor p n (x i ) = f i ger en koefficient c i. Enkla räkningar! 8 december 2014 Sida 6 / 20
Feluppskattning I praktiken känner vi inte f (ξ). Istället väljer vi en extra punkt (x n+2, f n+2 ) och beräknar ett nytt interpolerande polynom p n+1 (x). Vi gör feluppskattningen R T P n+1 (x) P n (x). Detta kan ses som att vi approximerar f (n+1) (ξ(x)) P (n+1) n+1 (ξ(x)) = c n+1. Kommentar Används Newtons interpolationsformel är det lätt att genomföra räkningarna. 8 december 2014 Sida 7 / 20
Exempel Låt f(x) = e x/2 cos(x/7)+(x 0.1) 2 /2, och antag att vi har följande tabell över funktionsvärden. x 0.0 0.5 0.7 f(x) 1.005 0.857 0.881 Använd dessa tabellvärden för att uppskatta f(x) för x = 0.35 genom linjär interpolation. Gör även en feluppskattning. Hur skall vi lösa uppgiften i MATLAB? Vad händer om vi vill använda kvadratisk interpolation? 8 december 2014 Sida 8 / 20
I MATLAB skriver vi >> x=[0 0.5 0.7];, y=[ 1.005 0.857 0.881 ]; >> p1 = polyfit( x(1:2), y(1:2), 1 ); >> p2 = polyfit( x(1:3), y(1:3), 2 ); Vi beräknar polynomen genom exempelvis >> xx=-0.1:0.01:0.8; y1=polyval(p1,xx); 1.15 0.16 1.1 0.14 1.05 0.12 1 0.1 0.95 0.08 0.9 0.06 0.85 0.04 0.8 0.02 0.75 0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0 0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 Vänster: Polynomen p 1 (x) och p 2 (x) samt f(x). Höger: Felet f(x) p 1 (x) och feluppskattningen R T p 2 (x) p 1 (x). Här är R T 0.038. 8 december 2014 Sida 9 / 20
För kvadratisk interpolation behövs 3 punkter för p 2 (x) och en ytterligare punkt för att uppskatta R T. 1.1 1.8 x 10 3 1.6 1.05 1.4 1.2 1 1 0.95 0.8 0.6 0.9 0.4 0.2 0.85 0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0 0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 Vänster: Polynomen p 2 (x) och p 3 (x) samt f(x). Höger: Felet f(x) p 2 (x) och feluppskattningen R T p 3 (x) p 2 (x). Här är R T 1.2 10 4. Vad händer om vi ökar polynomets gradtal ytterligare? 8 december 2014 Sida 10 / 20
Runges fenomen 2 1.5 1 0.5 0 0.5 5 4 3 2 1 0 1 2 3 4 5 Polynom av gradtal n = 4, 6, och 10 som interpolerar f(x) = 1/(1+x 2 ). Felet växer då polynomets gradtal ökar. Använd endast interpolerande polynom av lågt gradtal! 8 december 2014 Sida 11 / 20
Tillämpning - Upplösning på bildskärmar En LED display har ett fixt antal bildpunkter ordnade i ett rutnät av storlek M N. Allt som visas på skärmen måste ha precis denna upplösning. Höger: Bildpunkter. Vi söker värdet i punkt P. Mitten: Använd punkter Q 11, Q 12, Q 21, och Q 22 och bilinjär interpolation. Vänster: Bikubisk interpolation kräver 16 interpolationspunkter. Färre artefakter! 8 december 2014 Sida 12 / 20
Spline Interpolation Problem En funktion f(x) är känd i ett antal noder x 1, x 2,...,x n. Vi vill hitta en approximation s(x) f(x) på [x 1, x n ]. Hur skall vi göra? Lösning Använd linjär interpolation på varje delintervall [x i, x i+1 ]. f 2 f(x) f f 3 f 5 1 s(x) f 4 x 1 x 2 x 3 x 4 x 5 Teorin för linjär interpolation gäller! 8 december 2014 Sida 13 / 20
Linjära splinefunktioner Definition En funktion s(x) är en interpolerande linjär spline med noder x 1,...,x n om 1. s(x) är kontinuerlig på [x 1, x n ]. 2. s(x) är en rät linje på varje delintervall [x i, x i+1 ]. 3. s(x) interpolerar f(x) i noderna, dvs s(x i ) = f(x i ). Sats För en interpolerande linjär spline gäller f(x) s(x) M 8 h2, där f (x) M och h = max x i+1 x i. 8 december 2014 Sida 14 / 20
Kubiska Splinefunktioner f 2 f f 3 f 5 1 s 1 s 2 f 4 s 3 s 4 x 1 x 2 x 3 x 4 x 5 Definition En funktion s(x) är en interpolerande kubisk spline med noder x 1,...,x n om 1. s(x), s (x), och s (x) är kontinuerliga på [x 1, x n ]. 2. s(x) ges av ett tredjegrads polynom på varje delintervall [x i, x i+1 ]. 3. s(x) interpolerar f(x) i noderna, dvs s(x i ) = f(x i ). 8 december 2014 Sida 15 / 20
Exempel Bestäm en kubisk spline s(x) som interpolerar tabellen x 0 1 2 f(x) 1 2.5 2 med ändpunktsvillkor f (0) = 1 och f (2) = 1. Lösning Hitta polynom s 1 (x) och s 2 (x). f 2 f 3 f 1 s 1 s 2 x 1 x 2 x 3 Översätt kraven på s 1 och s 2 till ett linjärt ekvationssystem! 8 december 2014 Sida 16 / 20
Vår spline funktion blir { s1 (x)=1.0+1.00(x 0)+1.75(x 0) s(x)= 2 1.25(x 0) 3, 0 x 1, s 1 (x)=2.5+0.75(x 1) 2.00(x 1) 2 +0.75(x 1) 3, 1 x 2, 3 2.5 2 s 1 (x) s 2 (x) 1.5 1 0.5 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 Två kontinuerliga derivtor och rätt lutning i ändpunkterna! 8 december 2014 Sida 17 / 20
Ändpunktsvillkor Sats En kubisk spline funktion s(x), som interpolerar f(x) i noderna x 1,...,x n, blir unikt bestämd om vi ger två ändpunktsvillkor. Detta bevisas genom att jämföra antalet obekanta (4 koefficienter/intervall) med antalet villkor. Vi kan välja mellan Naturliga randvillkor: s (x 1 )=s (x n )=0. Rätta randvillkor: s (x 1 )=f (x 1 ) och s (x n )=f (x n ). Periodiska randvillkor: s (x 1 )=s (x n ). 8 december 2014 Sida 18 / 20
Feluppskattning Sats Då rätta randvillkor används gäller att s(x) f(x) 5 384 Mh4, där h = max x i+1 x i och M = max f (4) (x). Exempel Vi vill approximera f(x) = 1/(1+x 2 ), på intervallet [ 5, 5], med en kubisk spline funktion. Vi använder rätta ändpunktsvillkor. Hur beror felet på antalet punkter? N 5 9 17 h 1/4 1/8 1/16 Felet 0.2714 0.0561 0.0037 Vi ser att felet beter sig som Ch 4. 8 december 2014 Sida 19 / 20
I MATLAB används csape för att beräkna en interpolerande kubisk spline. >> pp = csape( x, y, complete, [ d1, d2 ] ); där d 1 och d 2 är numeriska värden på derivatorna f (x 1 ) och f (x n ). Beräkna splinefunktionens värden med ppval. 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 5 4 3 2 1 0 1 2 3 4 5 Vi plottar funktionen f(x) = 1/(1+x 2 ) och kubiska spline funktioner s(x) då N = 5, 9, och 17 punkter används. 8 december 2014 Sida 20 / 20