TANA21+22/ 5 juli 2016 LAB 1. FELANALYS 1 Inledning I laborationerna används matrishanteringsprogrammet MATLAB. som genomgående använder dubbel precision vid beräkningarna. 1.1 Innehåll Du ska 1. bestämma den avrundningsenhet, µ, som MATLAB använder (dubbel precision). 2. bestämma största och minsta tal som kan lagras. 3. studera hur beräkningsfelen påverkar resultaten i olika situationer. 4. använda MATLAB:s grafik för att illustrera. 5. tolka praktiska resultat och göra jämförelser mellan teori och praktik. 2 Flyttal Ett binärt (basen b = 2) flyttal representeras som en följd av nollor och ettor i ett s.k. ord. I MATLAB används 64 binära positioner (dubbel precision) för att lagra ett flyttal. Exponentdelens storlek bestämmer hur stort talområde som kan användas. Alla tal större än ett visst tal lagras som inf medan tal vars absolutbelopp är mindre än ett visst tal sätts till noll. Taldelens storlek bestämmer vilken noggrannhet som kan erhållas. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M Ettpositivtbinärtflyttal,x,kanskrivassomx = m 2 exp,därmärtaldelenoch1 m < 2. Om t bitar används för att lagra taldelens bråkdel blir övre gränsen för relativa felet vid flyttalslagring av talet x x x ε M 2 = µ = 0.5 2 t. Eftersom endast ett begränsat utrymme finns för att lagra taldelen blir 1 + x = 1 vid flyttalslagring om x är alltför litet. I IEEE-standarden, som används av MATLAB, gäller att 1+x = 1, för alla x µ. Detta kan användas för att praktiskt bestämma µ. Uppgift 2.1 Bestämning av t och µ Beräkna a = 1+0.5 2 n. Pröva med olika positiva heltal n mellan 50 och 60 och bestäm det minsta n för vilket a = 1 (enbart 1 skrivs ut). Så länge a > 1 skrivs det avrundade värdet ut (exempelvis 1.0000). Ange t, som är det minsta n för vilket a = 1? t = Räkna ut värdet på avrundningsenheten µ. µ = 1
Uppgift 2.2 Bestämning av antal signifikanta siffror för ett flyttal Bestäm en gräns för beloppet av absoluta felet vid lagring av talen b = e 30 ( i MATLAB: b=exp(30) ) och c = 0.13 18. Utnyttja att övre gränsen för relativa felet är µ. Ange värden på b och c med felgränser. b = c = Hur många korrekta decimaler 1 har närmevärdena till b respektive c? För b gäller: för c gäller: Hur många signifikanta siffror 1 har närmevärdena till b respektive c? För b gäller: för c gäller: Hur många decimala signifikanta siffror 2 får man ungefär för ett godtyckligt flyttal i MATLAB? Observera att antalet signifikanta siffror är 0.3 t + 1. Stämmer detta med vad du erhöll för b och c? Uppgift 2.3 Bestämning av det största flyttal som kan lagras Studera a = 1.99999 2 n, där n är ett positivt heltal. Bestäm det största n, som ger ett värde på a. Ange i decimal form ett ungefärligt värde på det största talet som kan lagras. Uppgift 2.4 Bestämning av det minsta positiva tal som kan lagras Bestäm på motsvarande sätt det minsta positiva tal som kan lagras genom att beräkna a = 2 n. 1 Använd regeln i rutan på sid 13 i Eldén/Wittmeyer-Koch. 2 Se tumregeln i slutet på kap 2.5 i Eldén/Wittmeyer-Koch 2
3 Andragradsekvationer Rötterna till ekvationen ax 2 +bx+c = 0 ges av följande uttryck x 1 = b+ b 2 4ac 2a, x 2 = b b 2 4ac. 2a Uppgift 3.1 MATLAB-körning Använd format long e, som skriver ut 16 siffror. Låt a = 1.1 och c = 0.7 hela tiden medan vi ska använda två olika värden på b (se tabellen). Ge a, c och b värden, räkna sedan ut x 1 och x 2 med formeln. Bestäm också de exakta värdena på rötterna med hjälp av MATLAB-funktionen roots som anropas med roots([a,b,c]) Fyll i antalet signifikanta siffror i tabellen nedan. Det fungerar om ni tittar på hur många siffror som överensstämmer. Antal sign. siffror Antal sign. siffror b i x 1 i x 2 8.48 10 5 8.48 10 7 (i MATLAB: b=8.48e5) Uppgift 3.2 Tolkning av resultaten Vilken rot (x 1 eller x 2 ) får dålig noggrannhet? Förklara varför just den roten får dålig noggrannhet. Förklara varför problemet med dålig noggrannhet ökar när beloppet av b blir större. Uppgift 3.3 Alternativ formel Ta fram en alternativ formel för att beräkna rötterna (se boken, sid 20). Uppgift 3.4 MATLAB-resultat med den alternativa formeln Räkna ut båda rötterna med den nya formeln och fyll i tabellen: Antal sign. siffror Antal sign. siffror b i x 1 i x 2 8.48 10 5 8.48 10 7 Vilken rot får sämst resultat i detta fall? Jämför med körningen i Uppgift 3.1 och förklara skillnaden. 3
4 Praktisk beräkning av ett gränsvärde Vi ska studera f(x) = 1 cosx x 2. Om vi Maclaurin-utvecklar cosx och sätter in i f(x) erhålls g(x) = 1 2! x2 4! + x4 6!. Uppgift 4.1 Gränsvärdet Bestäm gränsvärdet för f(x) då x 0. lim x 0 f(x) = Uppgift 4.2 MATLAB-beräkningar Vi ska räkna ut f(x) för x = 1,10 1,10 2,...,10 16, för att se om de praktiskt bestämda f(x)-värdena närmar sig gränsvärdet när x minskar. Skriv i MATLAB: (eller i en skript-fil) format long e ställer om utskriftsformatet. x=logspace(0,-16,17) ger de önskade x-värdena. x=x(:) ger en kolumnvektor. f=(1-cos(x))./x.^2./ och.^ gör elementvis division resp upphöjt till. [x f f-gränsvärdet ] genererar en tabell. format ställer tillbaks utskriftsformatet. Svara på följande frågor: För vilket x hamnade vi närmast gränsvärdet? Hur stor är avvikelsen från gränsvärdet i detta fall? Uppgift 4.3 Illustrationer Vi vill studera lite noggrannare hur nära gränsvärdet vi kan komma och ska därför rita f(x) i intervallet x [3 10 5,10 3 ] ( x=linspace(3e-5,1e-3,2000); ). Bestäm sedan f för dessa x-värden och plotta: plot(x,f) (Utnyttja tidigare MATLAB-kommandon som kan plockas fram genom att skriva första tecknet/tecknen (tex f) och uppåt-pil. Skriv semikolon efter uttrycket, så undertrycks utskriften.) Tyvärr kan vi inte, med hjälp av skalan på y-axeln, se hur nära gränsvärdet vi har hamnat. Rita därför en bild av felfunktionen ( fel=abs(f-gränsvärdet) ). Ta ut en papperskopia av felkurvan eller gör en skiss. Följ topparna på felkurvan och rita för hand en kurva som ligger precis ovanför värdena. Studera den och ange minsta felgräns och motsvarande x-värde= x opt. Minsta felgräns x opt 4
Uppgift 4.4 Tolkning av resultatet Felet vi ser är summan av två fel: trunkeringsfelet, R T, eftersom vi bara tar första termen i serien, och felet från beräkningarna, R B. R T kan uppskattas med beloppet av den andra termen i g(x). Om vi endast tar hänsyn till hur felet från beräkningen av cosx fortplantas, kan vi cosx µ uppskatta (hur?) R B < x 2 µ < x 2. Identifiera R T och R B i felkurvan. Markera i figuren ungefär för vilka x som R T resp. R B dominerar. Beräkna också det teoretiska totalfelet i x opt, dvs bestäm R TOT (x opt ) < R T (x opt ) + R B (x opt ). R TOT (x opt ) < + Jämför det teoretiska och det praktiskt avlästa värdet på R TOT (x opt ). Verkar resultatet rimligt? Motivera svaret! 5