Uppsala universitet Institutionen för informationsteknologi Teknisk databehandling Lösningsförslag Tentamen i Beräkningsvetenskap I, 5. hp, 14-6-4 Kursmål (förkortade), hur de täcks i uppgifterna och maximalt betyg Fråga nr Nyckelbegrepp Algoritmer Analys Programmering 1 3, 3 3 3 3 3 4 3, 3 5 3 6 4, 5 7 4, 5 Del A 1. (a) i. Sant. REALMIN är det minsta normaliserade flyttalet men det finns mindre tal som kan representeras. Dessa tal är subnormala och har lägre precision. ii. Falskt, konditionstalet bör vara så lågt som möjligt. Konditionstalet är en indikator på hur störningskänsligt ekvationssystemet är. Stort konditionstal medför hög störningskänslighet. iii. Falskt, felet avtar linjärt asymptotiskt och bisektsmetoden har då konvergenshastigheten 1. iv. Sant, diskretiseringsfelet är det matematiska felet och beror ej av flyttalssystemet och maskinepsilon. v. Falskt, normen av residualen blir ett mått på hur bra x uppfyller ekvationssystemet och beräknas A x b där x är vår approximativa lösning. Störningskänsligheten anges av konditionstalet. (b) Vid subtraktion av jämnstora tal i flyttalsaritmetiken tar de mest signifikanta siffrorna ut varandra och ersätts av osignifikanta (felaktiga) siffror. Detta kan då ge ett stort relativt fel i resultatet.. Pivotera högerledet: 1 Pb = 1
Framåtsubstitution: d = L\Pb d 1 = 1 d =.3333 d 3 = 1.3333 Bakåtsubstitution: 3. (a) I = x = U\d x 3 = 1.1818 x =.4545 x 1 = 1. 1 e x dx med trapetsformeln: h = 1 ( ) I = h e +e 1 = 1 (1+e 1 ).68394 h 1 = 1 ( ) ) I 1 = h 1 e +e (1 ) +e 1 = (1+e 1 14 +e 1.73137 4 R 1 = I 1 I 3.1581 > 1 h = 1 4 ) I = (1+e 1 1 16 +e 1 4 +e 9 16 +e 1.7498 8 R = I I 1 3.387 < 1 Svar: 1 e x dx.7498. (b) Trapetsformeln är av andra ordningen felet Ch. Vid h = h är felet 1 6. Vid h = h är felet.4. Det vill säga C(h ) 1 6 och Ch.4.
Dividera: (h ) 1 6 h 4 1 3, h = 1. 4 )3 1 3 (h ) ( 1 4 h 4 1 3 Svar: För ett fel 1 6 krävs steglängden 4 1 3, vilket innebär 5 steg. 4. (a) Funktion som definierar integranden, filnamn integrand.m: function f = integrand(x, sigma) f = exp(-x.^/sigma); Beräkning av integralen med hjälp av integral: >> S=integral(@(x)integrand(x,.5),-1,1); (b) Exempel på torrexekvering: % In-parametrar till funktionen f = @(x) x^3+5*x*x a = -3 b = 5 n = % Funktionen börjar här h = (5-(-3))/(*) = 8/4 = x = -3::5 = [-3,-1,1,3,5] sum = f(x(1)) : x(1) = -3 => f(-3) = -7 + 5*9 = 18 => sum = 18 % for i = ::length(x)-1 => for i = ::4 i = sum = sum + 4*f(x()) : x() = -1 => f(-1) = -1 + 5 = 4 => sum = 18+4*4 = 34 i = 4 sum = sum + 4*f(x(4)) : x(4) = 3 => f(3) = 7 + 5*9 = 7 => sum = 34+4*7 = 3 % slut for-loop eftersom nästa i = 6 > 4 % for i = 3::length(x)- => for i = 3::3 i = 3 sum = sum + *f(x(3)) : x(3) = 1 => f(1) = 1 + 5 = 6 => sum = 3+*6 = 334 % slut for-loop eftersom nästa i = 5 > 3 3
sum = sum + f(x(end)) : x(end) = x(5) = 5 => f(5) = 15 + 5*5 = 5 => sum = 334+5 = 584 I = (h/3)*sum = (/3)*584 = 389.3 5. För att hitta en lösning till x+e x = 3 formulerar vi först om problemet till att hitta ett nollställe till f(x) = x+e x 3. (Man kan även välja f(x) = 3 x e x, men här väljer vi det första alternativet.) Newton-Raphsons metod är x k+1 = x k f(x k) f (x k ), där vi i det här fallet har f(x) = x+e x 3 och f (x) = 1+e x. Felet e k i iteration k uppskattas med e k x k+1 x k = f(x k ) f (x k ). Från uppgiften får vi att vi efter tre iterationer har approximationen x 3 =.8, och då kan vi uppskatta felet till e 3 f(.8) f (.8) 3.55 3.55.79. Frågan är nu hur många iterationer som krävs för att felets storlek ska vara mindre än 1 8. Då måste vi komma ihåg att Newton-Raphsons metod har kvadratisk konvergens, vilket betyder att e k+1 e k. Frågan är alltså hur många gånger felet e 3 =.79 ska kvadreras för att bli mindre än 1 8. Man kan ställa upp en ekvation för detta:.79 k = 1 8 log(.79 k ) = log(1 8 ) klog(.79) = log(1 8 ) k = log(1 8 ) log(.79) k 1.96, 4
Del B så antalet iterationer måste vara större än 1.96, vilket betyder att man behöver iterationer. Det går även bra att testa sig fram: e 3.79 e 4.79 6.41 1 5 e 5 (6.41 1 5 ) 3.895 1 9 och då ser vi att e 5 < 1 8, så att den 5:e iterationen bör vara tillräckligt nära, och svaret blir att det räcker med ytterligare iterationer. 6. Givet intervallet [ a b ] approximera f(x) med en rät linje p(x), enligt figur. p(x) = f(a)+ f(b) f(a) (x a) b a Lös därefter ekvationen p( x) =. = f(a)+ f(b) f(a) ( x a) x = af(b) bf(a) b a f(b) f(a) 1.5 1.5 a p(x) c b.5 f(x) 1 1.5..4.6.8 1 1. x Vilket ger punkten c = x. Det nya intervallet väljs nu utifrån c och det gamla intervallets gränser så att den exakta lösningen omfattas (i det här fallet blir det nya intervallet [ c b ]). Därefter upprepas algoritmen tills felmarginalen är tillräckligt liten. Det enda vi vet är att lösningen omfattas av intervallet och då kan felet som högst vara lika med intervallängden. Algoritmen blir: 5
function r = nymetod( f, a, b, tol) % Felet kan högst vara lika med intervallets längd % Iterera tills feltoleransen har uppnåtts while (b-a)>tol % Hitta approximativ lösning c = (a*f(b) - b*f(a))/(f(b) - f(a)); % Välj nytt intervall if ( f(c) == ) r = c; return; % Vi har hittat lösningen, avbryt elseif ( f(c)*f(a) < ) b = c; else a = c; end end r=c; 7. Vi kan formulera om problemet till att hitta ett nollställe till funktionen f(x) = e x +x 1 e (xy) dy. De metoder för att hitta nollställen som ingår i kursen är Newton-Raphsons metod och bisektionsmetoden. Eftersom Newton-Raphsons metod behöver derivatan är bisektionsmetoden ett lämpligt val i det här fallet. I Matlab kan vi implementera f(x) i en funktionsfil och använda oss av fzero. Eftersom f(x) innehåller en integral, så vi måste först lösa problemet att beräkna integralen I(x) = 1 e (xy) dy. I kursen ingår trapetsformeln och Simpsons formel för beräkning av integraler. För att kunna beräkna integralen i Matlab implementerar vi först integranden e (xy) i en funktionsfil: function i = integrand(y, x) i = exp(-(x.*y).^); Funktionen tar både variabeln y som vi integrerar över, och en extraparameter x. Vi kan nu använda integral för att givet ett visst x beräkna integralen: 6
>> I = integral(@(y) integrand(y, x),, 1) Sedan skriver vi en funktionsfil för funktionen f(x) som vi vill hitta nollställe till: function fx = f(x) fx = exp(x) + x * integral(@(y) integrand(y, x),, 1); och slutligen anropar vifzero så här, där vi utifrån grafen valt startgissning x =.5: >> x = fzero(@f,.5) ans = -.611 Man kan även genom att använda namnlösa funktioner uttrycka allt detta på en enda rad: >> fzero(@(x) exp(x)+x*integral(@(y) exp(-(x.*y).^),, 1),.5) ans = -.611 För högsta betyg ska man även resonera om vilka fel som ingår. Det viktiga är att vi har ett diskretiseringsfel vid beräkning av integralen som kommer in som ett funktionsfel när vi söker efter ett nollställe. Vi kommer alltså söka efter ett nollställe till en funktion f(x) i stället för f(x). Vi kan uppskatta funktionsfelet f(x) f(x) utifrån diskretiseringsfelet från integralberäkningen. Om vi beräknar integralen med trapetsformeln kan vi använda tredjedelsregeln för att uppskatta diskretiseringsfelet, och använder vi Simpsons formel kan vi använda femtondelsregeln. Utifrån det kan vi ta två funktioner som tar det största och minsta möjliga felet: f max (x) = f(x)+fel f min (x) = f(x) fel Nollstället till f(x) ligger då någonstans mellan nollställena till f max (x) och f min (x). För att hitta dessa nollställen använder vi till exempel bisektionsmetoden. Den hittar inte ett exakt nollställe utan ger ett intervall där roten finns. Vi får då var sitt intervall 7
för nollställena till de två funktionerna. Om f min (x) har ett nollställe i intervallet [a min,b min ], och f max (x) har ett i [a max,b max ] kan vi som slutgiltig uppskattning av nollstället x ta intervallet från den lägsta av de undre gränserna till den högsta av de övre gränserna: x [a,b], a = min(a min,a max ), b = max(b min,b max )]. x * a max b max a min b min f max (x) f(x) f min (x) a b.8.6.4 Det kommer också uppstå avrundningsfel då alla tal inte kan representeras exakt i flyttalssystemet, men dessa är obetydliga jämfört med de andra felen. Om ekvationen kommer från någon modell av verkligheten har vi även ett modelleringsfel, eftersom den inte beskriver verkligheten exakt. I uppgiften anges inget om var ekvationen kommer ifrån, så vi kan inte resonera om vilka modelleringsfelen skulle kunna vara. 8