TANA18/18 mars 2015 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 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 Ett positivt binärt flyttal, x, kan skrivas som x = m·2exp , där m är taldelen och 1 ≤ 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| εM ≤ = µ = 0.5 · 2−t . |x| 2 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? Räkna ut värdet på avrundningsenheten µ. Svar: µ = 1 Svar: t = 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 = e30 ( i MATLAB: b=exp(30) ) och c = 0.1318 . Utnyttja att övre gränsen för relativa felet är ≤ µ. Ange värden på b och c med felgränser. Svar: b = c= Hur många korrekta decimaler1 har närmevärdena till b respektive c? För b gäller: för c gäller: Hur många signifikanta siffror1 har närmevärdena till b respektive c? För b gäller: för c gäller: Hur många decimala signifikanta siffror2 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? Svar: Svar: Uppgift 2.3 Bestämning av det största flyttal som kan lagras. Studera a = 1.99999 · 2n , 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. Svar: 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 2 Använd regeln i rutan på sid 13 i Eldén/Wittmeyer-Koch. Se tumregeln i slutet på kap 2.5 i Eldén/Wittmeyer-Koch 2 Svar: 3 Andragradsekvationer Rötterna till ekvationen ax2 + bx + c = 0 ges av följande uttryck x1 = −b + √ b2 − 4ac , 2a x2 = −b − √ b2 − 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 x1 och x2 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. b Antal sign. siffror i x1 Antal sign. siffror i x2 8.48 · 105 (i MATLAB: b=8.48e5) 8.48 · 107 Uppgift 3.2 Tolkning av resultaten Vilken rot (x1 eller x2 ) får dålig noggrannhet? Svar: Förklara varför just den roten får dålig noggrannhet. Svar: Förklara varför problemet med dålig noggrannhet ökar när beloppet av b blir större. Svar: Uppgift 3.3 Alternativ formel Ta fram en alternativ formel för att beräkna rötterna.(Se boken, sid 20) Svar: Uppgift 3.4 MATLAB-resultat med den alternativa formeln Räkna ut båda rötterna med den nya formeln och fyll i tabellen: b Antal sign. siffror i x1 Antal sign. siffror i x2 8.48 · 105 8.48 · 107 Vilken rot får sämst resultat i detta fall ? Svar: Jämför med körningen i Uppgift 3.1 och förklara skillnaden. Svar: 3 4 Praktisk beräkning av ett gränsvärde Vi ska studera f (x) = 1 − cos x . x2 Om vi Maclaurin-utvecklar cos x och sätter in i f (x) erhålls g(x) = 1 x2 x4 − + − · · ·. 2! 4! 6! Uppgift 4.1 Gränsvärdet Bestäm gränsvärdet för f (x) då x → 0. Svar: lim f (x) = x→0 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 x=logspace(0,-16,17) x=x(:) f=(1-cos(x))./x.^2 [x f f-gränsvärdet ] format ställer om utskriftsformatet. ger de önskade x-värdena. ger en kolumnvektor. ./ och .^ gör elementvis division resp upphöjt till. genererar en tabell. ställer tillbaks utskriftsformatet. Svara på följande frågor: För vilket x hamnade vi närmast gränsvärdet? Svar: Hur stor är avvikelsen från gränsvärdet i detta fall? Svar: 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= xopt . xopt ≈ Minsta felgräns ≈ Uppgift 4.4 Tolkning av resultatet Identifiera trunkeringsfelet, RT , (=andra termen i g(x)) och felet från beräkningarna, RB , i felkurvan. Markera i figuren ungefär för vilka x RT resp. RB dominerar. 4