LAB 1. FELANALYS 1 Inledning 2 Flyttal

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