Institutionen för datavetenskap Umeå universitet 18 december 15 Teknisk beräkningsvetenskap I 5DV154 Deltentamen inkusive svar Tid: 9. 13. Hjälpmedel: Matlab. Maximalt antal poäng: 1 5 poäng är tillräckligt för godkänt på detta delprov 1. (a) Nämn en fördel och en nackdel med att använda Newtons metod istället för fixpunktsiteration för att lösa ickelinjära ekvationer. (b) Förklara vad som menas med nogrannhetsordning. (c) Vad menas med ett styvt system när man pratar om ordinära differentialekvationer? (d) Implicita numeriska metoder för lösning av begynnelsevärdesproblem har oftast ett mycket större stabilitetsområde än explicita metoder, vilket innebär att man som regel kan välja tidssteg enbart utifrån den noggrannhet man behöver utan att ta hänsyn till stabilitetsbegränsningar. Varför använder man då inte alltid implicita metoder? [p] [3p] [p] [3p]. (a) Studera följande linjära ekvationssystem { x1 + x = 4 x 1 x = 3 Sätt upp systemet på formen Ax = b. Antag nu att vi har en störning i högerledet och istället löser A ˆx = b + δ, med A och b som tidigare, och störningen δ uppfyller δ 1 1 8. Ge en övre begränsning (beräkna denna numeriskt) av ˆx x 1, där x och ˆx är lösningarna till Ax = b respektive A ˆx = b + δ. (b) Newtons metod för att hitta nollställen till en funktion f kräver vanligtvis att man känner till funktionens derivata. Här ska vi undersöka en version som använder sig av en alternativ stegberäkning; istället för derivatan använder sig denna version av sekantapproximationen f (x k ) f (x k) f (x k 1 ) x k x k 1. (i) Skriv ner denna metod i pseudokod (du behöver alltså inte implementera metoden). Förutom att ändra stegberäkningen i Newtons metod så att den använder sig av högerledet i approximationen ovan istället för av den exakta derivatan, vilken eller vilka ändringar behövs för att metoden ska fungera? (ii) Implementera metoden och använd den för att beräkna tredjeroten ur 5 genom att lösa ekvationen f (x) = där f (x) = x 3 5. Uppskatta numeriskt metodens konvergensordning i ett fall där metoden genererar en talföljd som konvergerar mot x = 5 1/3. [1p] [3p] [1p]
3. (a) Antag att vi vill interpolera n punkter, (x i, y i ), där x i+1 > x i för i = 1,...,n 1, med en styckvis kvadratisk interpolant. Vilket är det största värdet på n för vilket man kan garantera att interpolanten blir (i) globalt kontinuerligt deriverbar (C 1 ; d.v.s. interpolanten såväl som dess derivata är kontinuerlig); (ii) globalt två gånger kontinurligt deriverbar (C ; d.v.s. interpolanten, dess derivata och dess andraderivata är kontinuerlig)? (b) Antag att funktionen f (x) är oändligt deriverbar och att vi vill beräkna I = 1 f (x)dx (i) Visa att den sammansatta mittpunktsformeln har noggrannhetsordning. (ii) Implementera den sammansatta mittpunktsformeln för att numeriskt beräkna 1 f (x)dx. Verifiera numeriskt att din metod har noggrannhetsordning vid beräkning av 1 ex dx. (Vi vet att I = e 1). Funktionen ska följa specifikationen i följande funktionshuvud function I = midpoint(fun,n) %MIDPOINT evaluate integral by the composite midpoint formula % % I = MIDPOINT(FUN,N) numerically approximates the integral % of the scalar-valued function FUN over the interval (,1) % by using the composite midpoint quadrature rule on N sub- % intervals. Input argument FUN is a function handle and N % is a positive integer. Function Y=FUN(X) should accept a % vector argument X, and return a vector Y, the integrand % evaluated at each element of X. 4. (a) Man vill numeriskt lösa begynnelsevärdesproblemet för differentialekvationen y = f (t, y) med ett schema baserat på mittpunktsformeln för integration. Följande två scheman är föreslagna: ( y k+1 = y k + t f t k + t, y ) k+1 + y k och y k+1 = y k + t f ( t k + t, y k + t ) f (t k, y k ) Bestäm villkoret för stabilitet för ovanstående scheman när de tillämpas på problemet y = λy. Ange speciellt tidsstegsbegränsningen då λ är reellt och uppfyller λ <. (b) Vi är intresserade av att bestämma avståndet y i illustrationen till höger. Newton s andra lag ger att det mekaniska systemet uppfyller m(y g ) + d y + k y =, där m är massan av klossen, k en fjäderkonstant och d en dämpningskonstant. Vid tiden t = är positionen och hastigheten för klossen kända, y() = 1 och y () =. (i) Skriv detta begynnelsevärdesproblem på standardform. (ii) Implementera en ode-lösare baserad på ett av de två föreslagna schemana från uppgift 4a och använd denna för att lösa begynnelsevärdesproblemet ovan från tiden till tiden T = 5 med m = k = 1, d = 1/5 och g = 9.8 (iii) Lös detta problem från tiden till tiden T = 5 med med Matlabs inbyggda ode-lösare ode45 samt plotta lösningen y som funktion av t. k m d y [1p] [13p] [1p] [1p]
Svar 1. (a) En fördel med att använda Newtons metod är att vi då får en snabb (kvadratisk) lokal konvergens. (b) Nogrannhetsordning anger hur felet beror på steglängden h (eller x) för en viss metod. Om en metod har noggrannhetsordning p så är felet O(h p ). (c) Ett styvt system innehåller vitt skilda tidsskalor, i fallet med ett linjärt ODE system u = Au så betyder detta att egenvärdena av matrisen A är vitt skilda i storlek. (d) Vid varje tidsteg krävs det många fler flyttalsberäkningar för en implicit metod jämfört med motsvarande explicita metod. Den explicita metod kommer därför att vara effektivare än den implicita metoden utom i de fall då den explicita metodens stabilitetsvillkor är så restriktivt att de stabila tidsstegen är avsevärt mycket mindre än vad som är motiverat ur noggrannhetssynpunkt.
Svar. (a) Ekvationsssytemet kan skrivas som Ax = b där [ ] 1 1 A =, x = 1 [ x1 x ] [ ] 4 och b = 3 (b) En begränsning av det relativa felet i högerledet ges av Vilket ger oss att x ˆx 1 x 1 κ 1 (A) b ˆb 1 = κ 1 (A) δ 1 κ 1 (A) 1 8 x ˆx 1 x 1 κ 1 (A) 1 8 Vi använder oss av matlab för att beräkna högerledet ovan enligt >> A = [1 1; 1 -]; >> b = [4; -3]; >> x = A\b; >> bound = norm(x,1)*cond(a,1)*1^-8/norm(b,1) bound = 1.7143e-8 Vilket ger oss begränsningen x ˆx 1 1.7 1 8 (i) För att använda oss av sekantapproximation behöver vi känna till de två första punkterna x och x 1. I varje steg sätter vi sedan x k+1 = x k + s där s löser f (x k ) + s f (x k) f (x k 1 ) x k x k 1 = (ii) En kod som implementerar metoden ovan är function xk = snewton(fun,x,x1) %solves nonlinear equation f(x)= by using the secant method % % FUN is a function handle to a function that given a point X returns % the value Y = FUN(X), the function evaluated at X. % % NOTE that this function returns the full sequence of numbers XK %note that this function is far from optimized for performance... xk(1)= x; xk() = x1; fold = fun(xk(1)); f = fun(xk()); tol = 1e-8; k = ; while norm(f)>tol dfdx_secant = (f-fold)/(xk(k)-xk(k-1)); s = -f/dfdx_secant; xk(k+1) = xk(k) + s; fold = f; f = fun(xk(k+1)); k = k+1; end Tredjeroten ur 5 ligger i intervallet [1,]. Körning av metoden ovan med x = 1 och x 1 = ger
>> fun = @(x) x.^3-5; >> xk = snewton(fun,1,) xk = Columns 1 through 6 1.. 1.5714 1.6879 1.7119 1.71 Columns 7 through 8 1.71 1.71 Om konvergensordningen är p har vi för tillräckligt stora k att x k+1 x C x k x p. Genom att logaritmera ovanstående uttryck har vi att log x k x logc + p log x k+1 x eller log x k+1 x /log x k x C/log x k x +p. Eftersom x k x då k kommer C/log x k x, så p log x k+1 x /log x k x. Vi beräknar ovanstående för några värden på k med hjälp av matlab >> lerror = log(abs(xk-5^(1/3))) lerror = Columns 1 through 6 -.345-1.378-1.9765-3.813-6.6-1.64 Columns 7 through 8-17.435-8.544 >> lerror(6)/lerror(5) ans = 1.6933 >> lerror(7)/lerror(6) ans = 1.641 >> lerror(8)/lerror(7) ans = 1.641 Vilket antyder att konvergensordningen är ungefär 1.6.
Svar 3. (a) (i) Om funktionen ska vara globalt kontinuerligt deriverbar kan n vara godtyckligt stort. Induktionsbevis: Det finns oändligt många kvadratiska funktioner som interpolerar (x 1, y 1 ) och (x, x ). Antag nu att vi har ett styckvis polynom som interpolerar (x 1, y 1 ), (x, y ),... (x j, y j ) och vi vill lägga till punkten (x j +1, y j +1 ), dvs vi vill hitta ett kvadratiskt polynom i intervallet (x j, x j +1 ), med specificerat värde i ändpunkterna och med derivatan specifierad i x j, detta ger oss ett ekvationssystem med tre ekvationer för våra tre obekanta (koefficienterna för polynombiten vi lägger till). (ii) Om funktionen ska vara två gånger kontinuerligt deriverbar och samtidigt på varje intervall vara ett andragradspolynom så kommer funktionen att vara ett andragradspolynom. Det största antalet punkter som man garanterat kan interpolera med ett andragradspolynom är 3. (b) (i) Låt x i = (i 1/) x för i = 1,,..., N. Den numeriska approximationen av 1 f (x)dx beräknad med den sammansatta mittpunktsregeln med steglängd x är I x M [f ] = x f (x n ). Genom att bryta upp integralen i N delar och Taylorutveckla varje del för sig får vi 1 f (x)dx = = = xn + x/ x n x/ xn + x/ x n x/ f (x)dx (f (x n ) + f (x n )(x x n ) + f (ξ n (x)) (x x n) ] [ x f (x n ) + f (ξ n ) ( x/)3 = I x x3 M [f ] + 3 4 f (ξ n ) ) dx där ξ n (x) är ett tal mellan x n och x och ξ n är ett tal i intervallet [x n x/, x n + x/]. Den sista summan innehåller N funktionsvärden och är lika med N gånger medelvärdet av dessa funtionsvärden. Då funtionen är kontinuerlig så finns ett tal ξ [,1] så att f (ξ) är just detta medelvärde. Alltså har vi 1 f (x)dx = I x x3 M [f ] + där den sista likheten följer av att xn = 1. 4 N f (ξ) = I x M [f ] + x 4 f (ξ), (ii) En implemention av mittpunktsmetoden ges av function I = midpoint(fun,n) %MIDPOINT evaluate integral by the composite midpoint formula % [...] xx = linspace(,1,n+1); xmid = (xx(1:end-1)+xx(:end))/; I = fun(xmid)*ones(n,1)/n; %note that deltax = 1/N Genom att numeriskt beräkna integralen 1 för några olika intervallstorlekar (halvera x varje steg) och jämföra felen får vi att >> E1 = abs(midpoint(@exp,1)-(exp(1)-1)); >> E = abs(midpoint(@exp,)-(exp(1)-1)); >> E4 = abs(midpoint(@exp,4)-(exp(1)-1)); >> E8 = abs(midpoint(@exp,8)-(exp(1)-1)); >> E1/E ans = 3.9991 >> E/E4 ans = 3.9998 >> E4/E8 ans = 3.9999 Så felet minskar med ungefär en faktor 4 när x halveras, vilket antyder att noggrannhetsordningen är.
Svar 4. (a) För det första schemat får vi för y = λy (b) Vilket efter omskrivning blir (om λ t ) y k+1 = y k + tλ y k+1 + y k y k+1 = 1 + λ t 1 λ t y k Metoden säges vara stabil om y k+1 y k, vilket i detta fall gäller om 1 + λ t 1 λ t 1 Vilket är sant om 1 + x 1 x, där x = tλ/, vilket i sin tur är sant för alla x som uppfyller Re{x}. För λ < är alltså schemat stabilt för alla tidssteg t >. Det andra schemat blir för y = λy: ( y k+1 = y k + tλ y k + t ) λy k = y k + tλy k + t λ Metoden säges vara stabil om y k+1 y k, vilket i detta fall gäller om 1 + 1 (1 + tλ) 1. ( 1 y k = + 1 ) (1 + tλ) y k För λ reellt ger villkoret ovan att (1 + tλ) 1, vilket medför tλ. I fallet där λ < får vi villkoret att t / λ måste vara uppfyllt för att metoden ska vara stabil. (i) Låt u 1 = y och u = y, begynnelsevärdesproblemet kan då skrivas ( ) ( ) ( ) ( ) u1 u u1 () 1 =, = (mg du ku 1 )/m u () u (ii) Den andra metoden kan implementeras som function [t,y] = expmidpoint(f,tspan,y,deltat) %assume that the time interval tspan(1) to tspan() can be divided into an %integer number of subintervals of length deltat t = tspan(1):deltat:tspan(); y = zeros(length(y),length(t)); y(:,1) = y(:); for k = 1:length(t)-1 kappa = f(t(k), y(:,k)); y(:,k+1) = y(:,k) + deltat*f((t(k)+t(k+1))/,y(:,k) + deltat*kappa/); end y = transpose(y); Högerledet f (t, y) med m = k = 1, d = 1/5 och g = 9.8 ovan kan skrivas som >> m=1; k=1; d=1/5; g=9.8; >> f = @(t,u) [u(); (m*g-d*u()-k*u(1))/m]; Vi får en numerisk lösning till systemet och plottar denna genom att skriva >> [t,y] = expmidpoint(f,[ 5],[1 ],.1); >> plot(t,y) (iii) För att istället använda ode45 och plotta lösningen kan vi skriva >> [t,y] = ode45(f,[ 5],[1 ]); >> plot(t,y) där f är definierad som ovan.