Lösningsanvisningar till de icke obligatoriska workoutuppgifterna Linjära system 7. (a) Falskt. Kondition är en egenskap hos problemet oberoende av precisionen i beräkningarna. (b) Falskt. Pivotering påverkar algoritmens stabilitet och har inget med konditionstalet att göra. (c) Rätt. Utan pivotering är algoritmen instabil och då kan avrundningsfel ackumuleras så att noggrannheten i den beräknade lösningen blir mycket dålig. 8. Hela sista raden i U består av nollor. Därmed kan vi dra slutsatsen att koefficientmatrisen i denna uppgift är singulär och att systemet saknar entydig lösning. Elimineringen i högerledet resulterar i att sista ekvationen i Ux = d blir 0 = 0. Slutsatsen blir att ekvationssystemet har oändligt många lösningar. 9. (a) Givet att endast de två termerna skilda från 0 är behäftade med mätfel blir relativa felet i högerledet (0.005 + 0.005)/(5000 + 6000) 9.1 10 7. (b) Relativt fel i x är enligt känd formel högst produkten av konditionstalet och relativa felet i högerledet. Nu är enligt uppgiften cond(a) 10. Tillsammans med svaret i föregående deluppgift ger detta att relativa felet i x är högst ca 10 9.1 10 7 < 10. Detta är mindre än 1 % fel. (c) Om konditionstalet är 10 6 blir relativa felet i x högst ca 10 6 9.1 10 7 9.1 10 1. Felet kan alltså vara större än 1 % i detta fall. 10. LU-faktorisering ger väsentligt kortare exekveringstid när vi vill lösa en följd av av ekvationssystem där alla systemen har samma koefficientmatris A och de olika högerleden inte är kända samtidigt. (Det kan till exempel vara så att varje nytt högerled beror på lösningar till tidigare system i följden av ekvationssystem.) De relevanta parametrarna för att uttrycka tidsvinsten är m (antalet ekvationssystem som ska lösas), n (A är en n n-matris) och t f (ungefärlig exekveringstid för en flyttalsoperation). Tiden för att lösa varje nytt system med gausseliminering och bakåtsubstitution blir ca m ( (2/)n + n 2) t f. Tiden för att först göra LU-faktorisering och därefter lösa varje nytt system med framåtsubstitution och bakåtsubstitution blir ca (2/)n t f + m ( n 2 + n 2) t f. Tidsvinsten då LU-faktorisering blir alltså ca (m 1)(2/)n mn 2. 1
11. Se läroboken, kap 9.4 12. Studera Fig 9.6 i läroboken. Gausselimineringen av koefficientmatrisen sker där i de två första raderna inuti den första for-loopen (beräkning av factor och av f(k)). Antalet flyttalsoperationer i dessa två rader är sammanlagt (en division, en multiplikation och en subtraktion). For-loopen går n 1 varv så det totala antalet flyttalsoperationer för LU-faktoriseringen blir ca n. 1. Sätt inledningsvis piv = 1:n. Ändra vidare i algoritmen för LU-faktorisering så att piv(k) och piv(i) används som radindex i koefficientmatrisen. När två rader ska byta plats med varandra håller vi ordning på detta genom att låta värdena piv(i) och piv(k) byta plats med varandra i piv. På så vis kommer raderna i koefficientmatrisen att bearbetas i rätt ordning (enligt radpivoteringen) utan att vi fysiskt behöver byta plats på raderna i koefficientmatrisen. 14. Operationen P b ersätts av att vi tar elementen i b i den ordning som anges av piv. I övrigt behövs inga förändringar av algoritmen. 2
Integraler 6. I uppgift c var steglängden h 1 = 1/4 och diskretiseringsfelet upskattades med tredjedelsregeln till ca -0.042. Absolutbeloppet av diskretiseringsfelet var alltså något mindre än 0.5 10 1, vilket innebär att integralen approximerades med en korrekt decimal. Vi söker nu steglängden h 2 = d (1/4) så att absolutbeloppet av diskretiseringsfelet blir 0.5 10 6 (vilket innebär sex korrekta decimaler). Diskretiseringsfelet i trapetsmetoden är proportionellt mot h 2. Det medför att när h ändras med en faktor d, till dh, så ändras felet med en faktor d 2. För att lösa uppgiften ska du alltså finna det värde på d som gör att d 2 0.042 = 0.5 10 6. Detta ger att d 0.0045. Den sökta steglängden är alltså ca 0.0045 (1/4) 8.6 10 4. Om vi vill göra en motsvarande analys för fallet med Simpsons formel så ska vi utnyttja att diskretiseringsfelet då är proportionellt mot h 4. Om vi med Simpsons formel skulle ha fått diskretiseringsfelet ɛ med steglängd 1/4, så skulle steglängden för att få sex korrekta decimaler bli d (1/4) där d 4 ɛ = 0.5 10 6. 7. (a) Av de metoder vi behandlat kan vi förvänta oss att Simpsons formel ger den noggrannaste lösningen. Simpsons formel tillämpad på våra data blir: Q 0.25 (1.00 + 4 0.9 + 2 0.74 + 4 0.4 + 0.00) = 0.66 (b) Vi behöver ta hänsyn till diskretiseringsfelet och funktionsfelet. Diskretiseringsfelet kan vi uppskatta med 15-delsregeln. Då behöver vi räkna ut Simpson-värdet för steglängden 0.5: Q 0.5 (1.00 + 4 0.74 + 0.00) = 0.66 Diskretiseringsfelet enligt 15-delsregeln blir då: (0.66 0.66)/15 = 0. Absolutbeloppet av funktionsfelet är enligt känd formel högst (b a)ɛ, där [a, b] är integrationsintervallet och ɛ är en övre gräns för felet i de enskilda funktionsvärdena. I vårt fall är b a = 1 0. Funktionsvärdena är enligt uppgiftstexten givna med två korrekta decimaler, så ɛ = 0.5 10 2. Slutsatsen blir att funktionsfelet är högst (1 0)0.5 10 2 = 0.5 10 2. Totalt blir felet summan av diskretiseringsfelet och funktionsfelet. Enligt de uppskattningar vi gjort ovan blir absolutbeloppet av det totala felet i vårt fall alltså högst ca 0.5 10 2. Detta innebär att Q har beräknats med ca två korrekta decimaler.
8. För härledning av 15-delsregeln: se kap 18.2.1 i läroboken. Härledning av övre gräns för funktionsfelet: Vi konstaterar först att det vi talar om är S(h) S(h), där S(h) är Simpsons formel med exakta funktionsvärden och S(h) är Simpsons formel med de faktiskt använda funktionsvärdena, som kan vara behäftade med avrundnings- och/eller mätfel. Vi betecknar de exakta funktionsvärdena med f(x) och de approximativa med f(x). Enligt föregående uppgift är f(x) f(x) < ɛ. Vi får S(h) S(h) = h [(f(x 0) f(x 0 )) + 4 Triangelolikheten ger nu 2 n 2 k=2,4,... S(h) S(h) h [ f(x 0) f(x 0 ) + 4 2 n 2 k=2,4,... h ɛ + 4 = h n 1 k=1,,... (f(x k ) f(x k )) + (f(x k ) f(x k )) + (f(x n ) f(x n ))] n 1 k=1,,... f(x k ) f(x k ) + f(x k ) f(x k ) + f(x n ) f(x n ) ] n 1 k=1,,... ɛ + 2 n 2 k=2,4,... ) ( ɛ + 4 n 2 ɛ + 2n 2 + ɛ 2 = h nɛ = hnɛ ɛ + ɛ Eftersom h = (b a)/n följer nu att S(h) S(h) (b a)ɛ, vilket skulle bevisas. 9. Ett allmänt förstagradspolynom har formen f(x) = c 0 +c 1 x. Uppgiften går ut på att bestämma a 0 och a 1 så att formeln i uppgiften gäller med exakt likhet för förstagradspolynom. Notera att eftersom det handlar om att härleda trapetsformeln, så betecknar x 0 integrationsintervallets nedre gräns, a, och x 1 den övre gränsen, b. Det vill säga a 0 och a 1 ska bestämmas så att: b (c 0 + c 1 x) dx = a 0 (c 0 + c 1 a) + a 1 (c 0 + c 1 b) a Detta kan skrivas om som c 0 (b a) + c 1 (b 2 a 2 )/2 = c 0 (a 0 + a 1 ) + c 1 (a 0 a 0 a + a 1 b) 4
För att detta ska stämma måste a 0 + a 1 = b a a 0 a + a 1 b = (b 2 a 2 )/2 I detta ekvationssystem betraktas a och b som givna. Genom att lösa ekvationssystemet får vi fram vi fram värden på de obekanta a 0 och a 1, närmare bestämt: a 0 = a 1 = (b a)/2. När vi sätter in dessa värden i formeln i uppgiften ser vi att resultatet har blivit trapetsformeln. Uppgiften visar alltså ett alternativt sätt att härleda trapetsformeln. Simpsons formel kan härledas på motsvarande vis. Den är exakt för tredjegradspolynom. 10. Givet integrationsgränserna a och b, antalet delintervall n samt en Matlab-funktion som beskriver integranden f(x), så kan trapetsformeln implementeras på följande vis: x = linspace(a,b,n+1) fx = f(x) coeff = [1 2*ones(1,n-1) 1] trap = (b-a)/2*coeff*fx 5
Ickelineära ekvationer 4. Tänkbara svårigheter: Startgissning x 0 nära kurvans minimipunkt gör att x 1 hamnar långt från nollställena. Ett olyckligt val av startgissning enligt ovan kan göra att iterationsprocessen divergerar. Om man skulle råka välja minimipunkten som startgissning så blir det division med noll. Det finns två lösningar i närheten av x = 1, den ena mindre än och den andra större än 1. Om man är ute efter en specifik lösning och råkar välja startgissningen för långt ifrån den, så kan eventuellt få konvergens mot den andra lösningen i stället. 5. Beträffande bisektionsmetoden vet vi att den övre gränsen för absolutbeloppet av felet halveras i varje iteration. Det innebär att det krävs log 2 (10). iterationer för att felet ska delas med 10 (vilket innebär att vi har fått ytterligare en korrekt decimal). I uppgift 1 gav bisektionsmetoden en lösning med en korrekt decimal. För att få 12 korrekta decimaler skulle vi alltså behöva åstadkomma ytterligare 11 korrekta decimaler, vilket skulle kräva ca 11. 6. iterationer. Eftersom det måste vara ett helt antal iterationer blir svaret att det krävs ytterligare 7 iterationer. Beträffande Newton-Raphsons metod vet vi att konvergenshastigheten är kvadratisk. Tumregelsmässigt kan vi då säga att när vi är nära en lösning så fördubblas antalet korrekta decimaler i varje iteration. I uppgift 1 gav Newton-Raphson en lösning med två korrekta decimaler. Efter ytterligare två iterationer kommer vi då att ha ca 8 korrekta decimaler. Sedan ger nästa iteration teoretiskt ytterligare en fördubbling av antalet korrekta decimaler. Svaret är alltså att det krävs ytterligare tre iterationer för att vi ska ha nått minst 12 korrekta decimaler. 6. Vi betraktar y som givet och vill beräkna y. Första steget är att formulera en ekvation till vilken y är en lösning. Ett naturligt val är x 2 y = 0. Vi tillämpar nu Newton-Raphsons metod på denna ekvation och får: x k+1 = x k (x 2 k y)/2x k Efter förenkling blir detta: x k+1 = (x k + y/x k ) /2 Vi provar formeln för fallet då y =. Enligt uppgiften ska vi ha tre signifikanta siffror vilket innebär att absolutbeloppet av relativa felet 6
bör vara högst ca 0.5 10. Vi uppskattar absolutbeloppet av relativa felet med (x k x k 1 )/x k. Med x 0 = får vi: k x k (x k x k 1 )/x k 1 2 0.5 2 1.72142857142857 0.155 1.72050810014728 5. 10 5 Efter tre iterationer kan vi alltså säga att = 1.7 med tre signifikanta siffror. Med formeln ovan kan man få en mycket noggrann approximation av y efter bara ett fåtal iterationer om man väljer startgissningen på ett smart vis. Om man skriver y > 0 som ett flyttal i normaliserad form så blir y = m 2 E, där 1 m < 2. Då kan vi konstatera att y = m 2 E/2. Vi kan enkelt räkna ut 2 E/2 om E är jämn. Om vi antar att 2 1/2 finns förberäknad och lagrad i datorn kan vi även räkna ut 2 E/2 för udda värden på E. Vidare innebär normaliseringen att m = 1 + c, där 0 c < 1. Taylorutveckling ger då att m 1 + c/2 c 2 /8. Genom att sätta x 0 = (1 + c/2 c 2 /8) 2 E/2 får vi alltså en mycket noggrann startgissning. Om vi tillämpar ovanstående på y = får vi följande. I basen 2 är y = 1.1 2 1. Startgissningen blir då x 0 = 1.00111 2 1/2 i bas 2. I bas 10 blir detta x 0 = 1.7257277914221. Om vi itererar med detta som utgångspunkt får vi: k x k (x k x k 1 )/x k 1 1.720716587278 0.0049 2 1.720508076948 1.2 10 5 1.7205080756888 7.2 10 11 4 1.7205080756888 0 Observera att de två sista iterationerna gav samma resultat. I detta fall skulle det alltså ha räckt med tre iterationer för att beräkna mycket noggrant. Resultatet x överensstämmer i samtliga decimaler med det resultat som operationen sqrt() ger i Matlab. 9. Uppskattningen är densamma som vi använde i beräkningarna i uppgift 6 ovan. Den bygger på att absoluta felet kan uppskattas med skillnaden mellan x k och x k 1. För att få en approximation av relativa felet dividerar man sedan approximationen av absoluta felet med x k. Vi visar nu att x k x k 1 är en approximation av absoluta felet x x k 1, där x betecknar den exakta men okända lösningen till f(x) = 7
0.. Eftersom x är en lösning till problemet gäller att f(x ) = 0. Det ger sambandet: f(x k 1 ) = f(x ) f(x k 1 Nu använder vi medelvärdessatsen och får att: f(x k 1 ) = f(x ) f(x k 1 = f (c) x x k 1, där c är en (okänd) punkt mellan x och x k 1. Ur sambandet ovan följer att x x k 1 = f(x k 1 ) / f (c) När vi är nära x är det rimligt att anta att f (c) f (x k 1 ). Om vi sätter in detta i sambandet ovan får vi att det absoluta felet approximeras av f(x k 1 ) / f (x k 1 ). Slutligen noterar vi att när Newton- Raphsons metod används så är f(x k 1 ) / f (x k 1 ) = x k x k 1. Därmed har vi visat att x k x k 1 är en approximation av absoluta felet x x k 1. Notera att vi i algoritmen använder denna uppskattning för att bedöma om x k (inte x k 1 ) är tillräckligt noggrann. Vid konvergens vet vi att noggrannheten ökar väsentligt för varje ny iteration, så felet i x k kommer i praktiken att vara betydligt mindre än det uppskattade felet för x k 1. 10. while ~(eq <= es iter >= maxit) xrold = xr; xr = xr - func(xr)/dfunc(xr); iter = iter + 1; if xr ~= 0, ea = abs((xr-xrold)/xr)*100: end end Observera att villkoret i while-loopen ovan även kan formuleras så här: eq > es & iter < maxit 11. Bedömningen av om det tentativa värdet var tillräckligt bra bör bestå av två delar: Värdet ligger fortfarande kvar i intervallet [a, b] Det uppskattade felet i approximationen har minskat Båda dessa villkor bör vara uppfyllda för att det tentativa värdet ska accepteras. Det första villkoret är enkelt att testa och behöver inte motiveras närmare. Det andra villkoret förutsätter att vi har ett sätt att uppskatta felet i det tentativa värdet. Därvid kan vi exempelvis använda den feluppskattning som visades i uppgift 9 ovan. Vi utför den uppskattningen 8
för x (k+1) och jämför med motsvarande uppskattning för x (k) (som vi gjorde när x (k) beräknades och som vi antar att vi har sparat i en variabel). Om denna jämförelse tyder på att x (k+1) är noggrannare än x (k) så anser vi att det andra villkoret ovan är uppfyllt. Som teoretisk motivering för denna del kan du använda samma resonemang som i uppgift 9. 9