Tentamen i Beräkningsvetenskap I och KF, 5.0 hp, 2014-08

Uppsala universitet
Institutionen för informationsteknologi
Beräkningsvetenskap
Tentamen i Beräkningsvetenskap I och KF, 5.0 hp, 2014-08-30
Lösningsförslag
Kursmål (förkortade), hur de täcks i uppgifterna och maximalt betyg (med
reservation för modifieringar).
Fråga nr
1
2
3
4
5
6
7
Nyckelbegrepp Algoritmer Analys Programmering
3, 3
3
3
3
3, 3
3
4, 5
4, 5
Del A
1. (a) Ange för vart och ett av nedanstående påståenden om det är sant eller falskt.
För godkänt krävs minst 3 rätt. Motivering behövs inte men kan hjälpa till vid
bedömning av gränsfall och för att reda ut eventuella missförstånd.
i. Falskt. Maskinepsilon betecknas eps i Matlab och är det minsta talet för
vilket 1+eps>1. Det minsta normaliserade flyttalet är gränsen för underflow
(betecknas REALMIN i Matlab).
ii. Falskt. Konditionstalet härrör ur det underliggande problemets (t ex det
fysikaliska eller kemiska problemets) natur, och det kan inte påverkas av
pivotering.
iii. Sant. Felet minskar kvadratiskt i varje iteration vilket medför att antalet
korrekta decimaler ungefär fördubblas i varje iteration.
iv. Sant (noggrannhetsordningen är 2 ⇒ felet beror av h2 )
(b) Noggrannhetsordning betecknar den hastighet som diskretiseringsfelet avtar med
då steglängden h minskar. Noggrannhetsordning p innebär att felet beror av hp ,
eller O(hp ).
1
2. LU-faktorisering med pivotering ger






1
0 0
4 4 8
0 1 0
L =  −1/2 1 0  , U =  0 4 2  , P =  0 0 1  .
1/4 1/2 1
0 0 −1
1 0 0
3. (a)
1
1
S(h = ) = (f (1) + 4f (1.25) + 2f (1.5) + 4f (1.75) + f (2)) = 2.083397.
4
12
Uppskattning av felet med femtondelsregeln:
1
S(2h) = (f (1) + 4f (1.5) + f (2)) = 2.088832.
6
och diskretiseringsfelet uppskattas med
E≈
S(h) − S(2h)
2.083397 − 2.088832
=
= −0.00036235.
15
15
Integralens värde blir alltså 2.0834 ± 0.0004.
(b) Simpsons metod har noggrannhetsordning 4 vilket medför att varje halvering
av steglängden ger en faktor 16 i noggrannhet. Hur många halveringar k som
krävs kan då t ex fås ur
16k = 4000 ⇒ k =
log(4000)
= 2.9914
log(16)
Det krävs alltså ca tre halveringar av steglängden, dvs minska steglängen med
1
1
. Om vi har enligt 3(a) har h = 14 , så blir den nya steglängden h = 32
.
8
4. (a) Anropet fin_func(3) medför n = 3, x1=3, x2=1, maxval=100
If-satsen:
x1 < 1 är falskt
x1 > 100 falskt
medför att programmet går in i else-grenen.
for-loopen: for i = 2:3
i = 2: x2 = x2*i = 1*2 = 2
i = 3: x2 = 2*3 = 6
Medför att x1 = 3 och x2 = 6 efter loopen och if-satsen
Värdet på utparametrarna afin, bfin blir afin = 3 och bfin = 6.
2
(b) Funktionen kan t ex skrivas
function fx = func(x)
fx = exp(x)./(x.^2);
5. Det som händer när man minskar steglängden är att diskretiseringsfelet (trunkeringsfelet) minskar och i början är det detta fel som dominerar och syns i det relativa felet.
När steglängden blir litet vänder felet och blir större igen. Det beror på att avrundningsfelet börjar dominera, och att det ökar när h blir väldigt litet.
Det fanns ett exempel på det här i kursens laboration om Datoraritmetik (där gällde
det beräkning av derivata).
(Att avrundningsfelet ökar här beror på att termerna i Trapetsformeln f (x0 ) +
2f (x1 ) + . . . + 2f (xn−1 ) + f (xn ) blir många och summan stor. Storleksskillnaden
mellan en enskild term och summan blir så stor att de inte kan representeras tillsamman och termen avrundas bort (S = S + t = S(1 + t/S) = S om t/S < eps) ).
3
Del B
6. Planket har en böljande form som följer ett tredjegradspolynom. Simspons formel
integrerar tredjegradspolynom exakt och om vi andvänder det får vi inget diskretiseringsfel men däremot ett funktionsfel som härrör från de inexakta mätningarna.
Simpsons formel på tabellvärderna ger Is = 59.35m2 men båda sidor ska målas och
då blir det 118.7m2 . Varje burk räcker till 14m2 vilket ger att det krävs 8.4786 burkar.
Dvs vi ska köpa 9 burkar färg och det blir 1.04 liter färg över. Felmarginalen kommer
från funktionsfelet och blir 0.01 · 40 · 2 = 0.8m2 vilket motsvarar 0.11 liter färg.
(Not: Den största felkällan kommer att vara osäkerheten i hur mycket färg som går
åt på underlaget och hur tjockt vi stryker på men någon information om detta har vi
inte given i uppgiften. En annan felkälla är hur mycket färg som finns i varje burk.)
7. Idé: Använd en funktion med känd lösning och beräkna lösningen med den funktionen med metodX. På det sättet kan felet beräknas genom att jämföra exakt lösning
med den beräknade. Börja att beräkna med en viss steglängd h och upprepa sedan
ett visst antal gånger, med halverade steglängder (kan göras i en loop). Noggrannhetsordningen p fås då ur 2p . Om man halverar h så vinner man alltså en faktor 2p
i noggrannhet (t ex en faktor 8 om p = 3). Vi kan då jämföra kvoten mellan två på
varandra följande fel f elh /f el0.5h ≈ p.
Algoritmskiss (exempel, det kan lösas på olika sätt):
Givet en funktion fun och dess analytiska lösning res_exakt
h = 0.5
% Initialt h t ex 0.5
for i = 1:n
(n kan t ex sättas till 10)
res = metodX(@fun, h)
fel(i) = abs(res - res_exakt);
% Beräkna fel och lagra i vektor
h = h/2;
% Halvera steglängd
end
% Beräkna kvoten mellan på varandra följande tal i vektorn
noggrannhetsordning = fel(1:n-1)/fel(2:n);
Variabeln nogrannhetsordning blir då en vektor som innehåller kvoter, och man
kan läsa ut noggrannhetsordningen ur denna.
Det krävs inte att algoritmen skrivs i Matlab, utan det går bra att skriva som beskrivande text i punktform. Sista raden är kompakt skriven med kolon-notation, men
det går lika bra att utföra samma sak med for-loop istället.
4