Lösningar till Tentamen i Beräkningsvetenskap II, 5.0 hp, 2013-03-18 Del A 1. (a) ODE-systemet kan skrivas på formen z (t) = f(t, z), där z(t) = x(t) y(t) u(t) v(t), f(t, z) = u(t) v(t) kx(t)/ ( x2 (t) + y 2 (t) ky(t)/ ( x2 (t) + y 2 (t) ) 3 ) 3. Eulers explicita metod kan då skrivas som z k+1 = z k + hf(t k, z k ). (b) Eulers explicita metod har noggrannhetsordning 1 medan den klassiska Runge Kutta-metoden har noggrannhetsordning 4. Det globala felet är alltså proportionellt mot h för Eulers metod och h 4 för klassiska Runge Kuttas metod. Det betyder att klassiska Runge Kuttas metod kan använda större steglängd än Eulers metod och hålla en given feltolerans. Större stegländ betyder färre antal beräkningar. Även fast klassiska Runge Kuttas metod kräver mer arbete per steg så gör 1
den högre noggrannhetsordningen att klassiska Runge Kuttas metod blir effektivare. 2. (a) Stabilitetsanalys av implicita Eulers metod. Stabilitet analyseras genom att metoden tillämpas på testekvationen, y (t) = λy(t). Tillämpa implicita Eulers metod på testekvationen, ger y i+1 = y i + hλy i+1 y i+1 = y i /(1 hλ). Av detta följer att y i = y 0 /(1 hλ) i För stabilitet krävs att y i 0 då i. Enligt formeln ovan måste det alltså gälla att 1/(1 hλ) i 0 då i, vilket i sin tur förutsätter att 1 hλ > 1. Stabilitetsvillkoret blir därför: 1 hλ > 1. (b) Stabilitetsområdet är det område i komplexa talplanet som utgörs av de värden på hλ för vilka metoden är stabil. 3. (a) Newtons interpolationsansats för N punkter x i och N funktionsvärden f(x i ), i = 0, 1,..., N 1: P N (x) = a 0 + a 1 (x x 0 ) + a 2 (x x 0 )(x x 1 ) +... + a k (x x 0 )(x x 1 ) (x x k 1 ) +... + a N (x x 0 )(x x 1 ) (x x N 1 ). 2
För att bestämma koefficienterna a i vi får lösa N ekvationer P N (x i ) = f(x i ) I vårt fall, N = 3: a 0 = f(x 0 ) a 0 + a 1 (x 1 x 0 ) = f(x 1 ) a 0 + a 1 (x 2 x 0 ) +a 2 (x 2 x 0 )(x 2 x 1 ) = f(x 2 ) det vill säga a 0 = 0.26 a 0 + a 1 (1.5 1) = 0.29 a 0 + a 1 (1.5 1) +a 2 (2 1)(2 1.5) = 0.43 Lösningen till detta ekvationssystem är a 0 = 0.26, a 1 = 0.06, a 2 = 0.56 och polynomet är P 3 (x) = 0.26 + 0.06(x 1) + 0.28(x 1)(x 1.5). (b) Minstakvadratanpassning med andragradspolynom till de givna punkterna ger i detta fall samma resultat som interpolation därför att vi har tre punkter. Genom tre punkter finns ett entydigt interpolationspolynom av grad 2. När vi minstakvadratanpassar ett andragradspolynom till de givna punkterna kommer interpolationspolynomet att vara det andragradspolynom som ger minst fel enligt den felnorm som vi minimerar i minstakvadratanpassning. 4. (a) Vi vet att felet i en approximation som erhålls 3
med en Monte Carlo-metod avtar som fel(n) C N. (1) Här är C en konstant och N är antalet beräkningspunkter. Vi har att fel(10000) = 10 1. (2) Varför vi kan beräkna C som C 10000 10 1 = 10. (3) Vi kan nu räkna ut hur många beräkningspunkter som krävs för felet 10 3 enligt N = ( 10 10 3 ) 2 = 10 8. (4) (b) En stokastisk metod är en algoritm där det används slumptal ur någon fördelning för att erhålla numeriska resultat. 4
Del B 5. (a) Uppgift för betyg 4 >> h = [0.025 0.05 0.1]; >> fel = [0.00015 0.0024 0.037]; För att få fram den kantiga figuren har Matlab använd sig av styckvis linjär interpolation (eller linjära splines). Ekvationerna för de båda linjerna kan fås fram genom till exempel styckvis linjär interpolation med Newtons interpolationsansats. För att få fram den första linjen ansätter vi p 1 (h) = a 0 + a 1 (h h 0 ). Insättning av värdena ger ekvationssystemet a 0 = 0.00015 a 0 + 0.025a 1 = 0.0024 vilket genom substitution ger och a 0 = 0.00015, a 1 = 0.09 p 1 (h) = 0.00015 + 0.09(h 0.025). Den andra linjen fås genom ansatsen p 2 (h) = b 0 + b 1 (h h 1 ) 5
och insättning av värdena ger ekvationssystemet med lösningen b 0 = 0.0024 b 0 + 0.05b 1 = 0.037 b 0 = 0.0024, b 1 = 0.692. Det andra polynomet blir alltså p 2 (h) = 0.0024 + 0.692(h 0.05). Svar: Det första polynomet ges av p 1 (h) = 0.00015 + 0.09(h 0.025). och det andra av p 2 (h) = 0.0024 + 0.692(h 0.05). (b) Uppgift för betyg 5 Felet i numeriska metoder för ODE är av formen fel Ch p. Om man logaritmerar feluttrycket får man log(fel) log(c) + p log(h), där man har använt räkneregeln för logaritmer som säger att logaritmen av en produkt är summan av logaritmerna. 6
Vi har nu ett uttryck som beskriver en rät linje med lutning p. Det betyder att vi kan få en uppskattning av p genom att minstakvadratanpassa en rät linje till de data vi har för felet och steglängden, insatta i ovanstående formel. Matlab-kod för detta skulle kunna se ut enligt följande: x = log(h); y = log(fel); Q = polyfit(x,y,1); % Polynomanpassning med gradta p = Q(1); % Lutningen ges av forsta koef Alternativ lösning till Uppgift 5 för betyg 5 Ett annat sätt att uppskatta p är att använda formeln fel Ch p för de olika stegl ngderna och sedan lösa ut p, dvs fel(1) Ch p, fel(2) C(2h) p, fel(3) C(4h) p, 7
vilket leder till fel(2) fel(1) 2p, fel(3) fel(2) 2p, i vilket fall ett närmevärde skulle kunna fås genom att ta medelvärdet av de två resultaten. Matlab-kod i detta fall for i=1:2 kvot(i) = fel(i+1)/fel(i); res(i) = log2(kvot(i)); end p = mean(res); Om man istället använder alla tre värdena kan man få en formel fel(3) fel(2) fel(2) fel(1) C(4h)p C(2h) p = 2p (2 p 1) C(2h) p Ch p (2 p 1) Matlab-kod för detta blir kvot = (fel(3)-fel(2))/(fel(2)-fel(1)); p = log2(kvot); Kommentar till lösningarna Endast den första lösningen följer uppgiftsformuleringen strikt, eftersom den använder en metod från kurvanpassningsblocket i kursen (minstakvadratanpassning). 8 = 2 p
De alternativa lösningarna godkändes också eftersom de visar på en förståelse av uppgiften och leder till ett korrekt svar. 6. (a) Uppgift för betyg 4 Vi väljer att approximera integralen, som vi betecknar I, med den Monte Carlo-metod för integralberäkning, som vi har behandlat i kursen. För att vi skall vara säkra på att metoden konvergerar krävs att mätpunkterna x j kan uppfattas som slumptal ur en likformig fördelning mellan strandkanterna. Låt a vara avståndet mellan strandkanterna och x j en mätpunkt med motsvarande mätdata d j. En approximation av integralen är då I j (x j ) = ad j. (5) Enligt den ovan nämnda Monte Carlo-metoden ska vi beräkna medelvärdet av alla I j (x j ) för att vara garanterade en approximation som konvergerar då antalet mätpunkter ökar. Vi får I 1 I j (x j ) = a d j. (6) N N x j x j (b) Uppgift för betyg 5 Vi använder de givna mätvärdena längs linjen. (Om linjens två ändpunkter inte ingår bland mätpunkterna, så lägger vi till dem och sätter i så fall 9
djupet till 0 där, eftersom dessa är strandpunkter.) Ett lämpligt angreppssätt är att göra någon form av kurvanpassning baserad på nämnda mätvärden. Vi kan därefter använda den anpassade kurvan för att beräkna uppskattningar av djupet i punkter som inte ingår bland mätpunkterna. Vi kan därmed beräkna djupvärden i punkter som är jämnt fördelade längs linjen. Eftersom det är troligt att det finns mer än ett fåtal mätpunkter, så är vanlig interpolation inte lämplig. Detta förfarande skulle leda till ett polynom av högt gradtal och med risk för Runges fenomen, det vill säga att polynomet uppvisar kraftiga oscillationer som gör att det är orimligt att använda för uppskattning av djupvärden mellan mätpunkterna. Minstakvadratanpassning med ett polynom av lågt gradtal kunde vara rimligare, men ändå inte det lämpligaste förfarandet med tanke på att sjöbotten kan förmodas vara oregelbunden och inte polynomliknande. Det lämpligaste angreppssättet är i stället styckvis interpolation. Eftersom bottenprofilen sannolikt är oregelbunden skulle styckvis lineär interpolation vara tillräckligt. 10