Uppsala universitet
Institutionen för informationsteknologi Teknisk databehandling
Lösningar till tentamen i Beräkningsvetenskap II (nya versionen), 5.0 hp, 2009-06-01
Del A
1. Vi har tidpunkterna t0 = 2 , t1 = 5 och t2 = 10 . Ansätt Newtons interpolationspolynom
p(t) = A0+ A1(t − t0) + A2(t − t0)(t − t1)
Vi har nu kravet att interpolationspolynomet ska gå igenom de tre giv- na punkterna, dvs. det ska anta värdena 0.6 , 1.5 samt 2.6 då t är 2 , 5 resp. 10 .
p(2) = 0.6 ger direkt A0 = 0.6 .
p(5) = 1.5 ger A0+ A1(5 − 2) = 1.5 , dvs. A1 = 0.3 .
p(10) = 2.6 ger A0 + A1(10 − 2) + A2(10 − 2)(10 − 5) = 2.6 , dvs.
A2 = −0.01 .
Vi får p(t) = 0.6 + 0.3(t − 2) − 0.01(t − 2)(t − 5) och den uppskattade höjden efter 7 år blir p(7) , dvs. 2.0 meter.
2. Generera den ackumulerade sannolikhetsfördelningen genom att sum- mera successiva givna sannolikheter. Vi får då talen 0.21, 0.49, 0.76 samt 1.0 . Den ackumulerade sannolikhetsfördelningen kan ses som en funktion som har värdena
0.21 1 ≤ x < 2 0.49 2 ≤ x < 3 0.76 3 ≤ x < 4 1.0 4 ≤ x < 5
Vi kan nu generera talen 1, 2, 3 och 4 med de önskade sannolikheter- na genom att använda slumptal r likformigt fördelade på intervallet 0 ≤ r < 1 . Vi slumpar fram ett sådant r och genererar
1 om 0 ≤ r < 0.21 2 om 0.21 ≤ r < 0.49 3 om 0.49 ≤ r < 0.76 4 om 0.76 ≤ r < 1
3. Eftersom det sista värdet kunde betraktas som exakt, kan vi beräkna felet i de fyra första approximationerna:
h = 0.5 fel 1.54312 - 1.50784 = 0.03528 h = 0.25 fel 1.50998 - 1.50784 = 0.00214 h = 0.125 fel 1.50798 - 1.50784 = 0.00014 h = 0.0625 fel 1.50785 - 1.50784 = 0.00001 Vi beräknar kvoten mellan två på varandra följande fel:
0.03528 / 0.00214 = 16.49 0.00214 / 0.00014 = 15.29 0.00014 / 0.00001 = 14.00
och finner att den är ungefär 16, (den sista kvoten är ej noggrann, eftersom det sista felet bara har en signifikant siffra). Approximations- ordningen bör vara 4, (eftersom 24 = 16 ).
4. I denna uppgift fanns ett oavsiktligt fel i formuleringen. Där det står f(rand) borde det ha stått f(a+rand*(b-a)). De fel som det var tänkt att studenterna skulle finna var följande:
(a) Det mer formella felet är att resultatvariabeln res inte tilldelas något värde (i stället sker detta till variabeln r). Detta kommer att märkas av MATLAB vid ett provanrop.
(b) Intervallgränserna a och b används inte i funktionen, och denna kommer att fungera som vid en integral över ett intervall av längd 1. intvarde borde tilldelas (b-a)*sum/N .
(c) Vid Monte Carlo-integrering ska resultatet bli medelvärdet av de olika försöken, men här beräknas summan. Slutresultatet borde vara sum(temp)/antf .
5. För ett generellt system av differentialekvationer x0 = f (t, x, y) y0 = g(t, x, y)
har vi metoden Euler framåt (explicit Euler):
xk+1 = xk+ h · f (tk, xk, yk) yk+1 = yk+ h · g(tk, xk, yk)
I vårt fall har vi h = 0.1 , t0 = 0 , t1 = 0.1 och t2 = 0.2 . Vi känner x0 = 1 och y0 = 1 och ska beräkna x1, x2, y1 och y2. Vi får i första steget
x1 = x0+ h(x20+ y0− t0) = 1 + 0.1(12+ 1 − 0) = 1.2 y1 = y0+ h(x0+ y0) = 1 + 0.1(1 + 1) = 1.2
och i andra
x2 = x1+ h(x21+ y1− t1) = 1.2 + 0.1(1.22+ 1.2 − 0.1) = 1.454 y2 = y1+ h(x1 + y1) = 1.2 + 0.1(1.2 + 1.2) = 1.44
Del B
6. Ett rimligt antal steg för den första lösingen kan vara t.ex. 50. De senare får då 100 resp. 200 steg. Antalet värden i lösningen blir då 51, 101 resp. 201. Skillnaden mellan slutvärdena bör gå ned med en faktor 4 då steget halveras, och vi kan acceptera värden mellan t.ex. 3.8 och 4.2 . Vi får ett program
y0 = 1;
Ns = 50;
Nt = 100;
Nu = 200;
rs = odesolve( @fun, 2, 3, Ns, y0 );
rt = odesolve( @fun, 2, 3, Nt, y0 );
ru = odesolve( @fun, 2, 3, Nu, y0 );
kvot = (rs(Ns+1)-rt(Nt+1)) / (rt(Nt+1)-ru(Nu+1));
if kvot >= 3.8 && kvot <= 4.2
% endast vartannat värde i den bästa lösningen kan användas for k = 1:Nt
fel(k) = ( ru(2*k-1) - rt(k) ) / 3; % tredjedelsregeln end
h = (3-2)/Nt;
xx = 2:h:3;
plot( xx, fel );
title(’Uppskattat fel’);
end
7. Vi antar att N är så stort att det är ogenomförbart att undersöka al- la de (N − 1)! möjliga resorna med början i stad K. Vi undersöker i stället ett (stort) antal resor mellan städerna i slumpmässig ordning, dock med alla resor börjande i stad K. Man väljer då slumpmässigt ut en stad bland de N − 1 kvarvarande, ser hur lång tid resan dit tar, sedan en bland de N − 2 kvarvarande, adderar tiden för resan till den- na, o.s.v. tills man gått igenom alla städerna. Man har nu fått tiden för en slumpmässig resa mellan alla städerna. Detta upprepas ett antal gånger. Eftersom man inte vill ha den genomsnittliga restiden utan den minimala, ska man ta minimum av de erhållna restiderna. Detta blir förhoppningsvis ett approximativt värde för minimitiden för en resa mellan alla städerna.
För det praktiska genomförandet bör man lagra städernas nummer i en array. I början ingår alla nummer utom K. Man slumpar bland num- ren i arrayen och får nästa stads nummer. För att inte detta ska kunna komma upp igen, ska det tas bort ur arrayen, och det görs enklast ge- nom att man flyttar ner sista elementet i arrayen och lägger det på den plats där det dragna numret låg, och förkortar arrayens längd med 1.
I det föregående momentet behöver man kunna generera slumpvisa hel- tal mellan 1 och P , där P kan variera mellan N − 1 och 1. Detta kan göras genom att generera ett slumptal r likformigt fördelat på interval- let [0, 1) och sedan beräkna heltalsdelen av P · r + 1 .
8. (a) Om man löser minstakvadratproblemet i sin ursprungsformulering så måste man lösa ett ickelinjärt minstakvadratproblem, eftersom en av de obekanta koefficienterna, b, inte står framför någon bas- funktion utan i exponenten. Man kommer då att ha minimerat summan
N
P
j=1
(fj− aebjx)2.
Om man logaritmerar och löser motsvarande linjära minstakvadrat- problem, kommer man i stället att ha minimerat summan
N
P
j=1
(ln fj − ln aebjx)2.
I båda fallen kommer metoden att fördela felen ganska jämnt över intervallet, dvs. de enskilda skillnaderna i summan kommer att vara ungefärligen lika stora. I det logaritmerade fallet betyder en liten skillnad i logaritmen en mycket liten skillnad i det absoluta funktionsvärdet om funktionsvärdet är litet, men en ganska stor skillnad om funktionsvärdet är stort. Metoden med logaritmering ger alltså bättre approximation där funktionen f har små värden, men sämre där den är stor.
(b) Problemet går inte att linearisera genom logaritmering, eftersom logaritmering av addition inte ger en enkel operation. I ursprungs- formuleringen är det koefficienten b som försvårar problemet. Om man nu vet ungefär i vilket intervall som b ska ligga för att man ska få den bästa approximationen, så kan man välja ett fixt vär- de, säg b1, och lösa minstakvadratproblemet för detta. Detta blir ett linjärt minstakvadratproblem, eftersom bara a och c är okän- da. Man beräknar också den kvadratsumma man erhåller. Detta upprepas sedan systematiskt för andra värden b2, b3 osv. i inter- vallet. Kvadratsumman räknas ut för varje fall, och man får en
uppfattning om hur denna beror av b . Man kan sedan t.ex. med interpolation räkna ut vilket b som ger den bästa approximationen och lösa problemet med detta för att se vad a och c då blir. Ev.
kan man välja nya b-värden tätare i ett snävare intervall.