Uppsala universitet Institutionen för informationsteknologi Avdelningen för beräkningsvetenskap Tentamen i Beräkningsvetenskap I och KF, 5.0 hp, 2015-12-17 Skrivtid: 14 00 17 00 (OBS! Tre timmars skrivtid!) Hjälpmedel: Bifogat formelblad och miniräknare. För fullt uppfyllda mål på uppgifterna krävs att det redovisar uträkningar och utförliga resonemang och motiveringar till alla svar. Kursmål (förkortade), hur de täcks i uppgifterna och maximalt betyg (med reservation för modifieringar). Fråga nr Nyckelbegrepp Algoritmer Analys Programmering 1 3 3 2 3 3 3 3 4 3 5 3 3 6 4 7 5 Del A 1. (a) Visa att du behärskar algoritmen för LU-uppdelning med pivotering, genom att utföra algoritmen på matrisen 2 1 4 A = 4 2 8. 3 1 1 Ange LU-faktorerna och pivoteringsmatrisen P explicit. (b) Antag att du löser ett stort ekvationssystem (inte det i (a) alltså) med Gausselimination, och att det tar ca 1 minut att lösa detta system på en dator i labsalen. Nu har du tänkt lösa ett dubbelt så stort ekvationsystem, och du har bara 5 minuter på dig innan labben är slut. Det måste väl ändå funka, säger din kompis vid datorn bredvid. Men vad gäller egentligen? Hur lång tid kommer det ungefär att ta att lösa systemet? Motivera ditt svar. 1
2. Nedan ser du några utskrifter från Matlab (delvis tagna från en av laborationerna i kursen). För var och en av dessa, ange ett nyckelbegrepp som är relaterat till det du ser och förklara också på vilket sätt det är relaterat. Använd enbart ett nyckelbegrepp per exempel. (a) (b) >> a = 1e-10; b = 1e-26; >> a+b ans = 1.000000000000000e-10 >> x= A\b; Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.422326e-17. 3. Planeterna rör sig i excentriska banor runt solen, men med vissa irregulariteter (de är inte perfekt excentriska). Kepler introducerade en excentrisk anomali E (radianer), medel-anomali M (i radianer) och excentriciteten, e i den icke-linjära ekvationen M = E e sin(e). Använd Newton-Raphsons metod för att beräkna E med toleransen 0.05 (dvs en korrekt decimal) givet att M = π 6 (= 30 ), och e = 0.5. Starta med startapproximationen E 0 = 0.5. För godkänt måste du kontrollera stoppvillkoret (ingår i algoritmen). Använd radianer i dina beräkningar. (Om du inte har radianer i din miniräknare kan gå från grader till radianer genom att multiplicera vinkeln i grader med π 180.) 4. Antag att du har skrivit en kod som utför integrering med Simpsons metod utan adaptivitet. Men är koden är korrekt eller ej? För att ta reda på detta utför du ett test där koden används för att lösa en integral med känd lösning. På detta sätt kan felet beräknas. Testet ger följande resultat för olika steglängd h I Q(h) 0.40 4.458 10 4 0.20 2.635 10 5 0.10 1.621 10 6 0.05 1.009 10 7 Den exakta lösningen betecknas här med I och den beräknade lösningen med steglängd h betecknas Q(h). Utgående från resultaten, är det sannolikt att koden är korrekt eller ej? Motivera ditt svar. 2
5. (a) Nedanstående Matlabfunktion utför beräkning av kubikrot av a, dvs 3 a: function x = kubikrot(a, x0, tol); x(1) = x0; fel = tol + 1; i = 1; while fel > tol x_ny = x(i) - (x(i)^3-a)/(3*x(i)^2); fel = abs(x_ny - x(i)); x = [x ; x_ny]; i = i+1; end Torrexekvera programmet då det anropas med x = kubikrot(7, 2, 0.1). Med torrexekvering avses att du följer programmet och redovisar rad för rad vad som händer (och skriver ut successiva värden på parametrar etc). (b) Skriv den matematiska funktionen f(x) = x p sin(x) som en Matlabfunktion med namnet func1. Parametern p ska ha värdet 0.5. Matlabfunktionen ska vara skriven så att den lagras i en egen m-fil i Matlab. 3
Del B 6. Ett företag producerar elektriska kretsar med olika elektriska komponenter. Strömmen i olika knutpunkter i en sådan elektrisk krets kan beräknas via ett linjärt ekvationssystem Ax = b, där n n-matrisen A är härledd ut den elektriska kretsen och är densamma givet en viss elektrisk krets. Vektorn med obekanta x innehåller strömmen i n st knutpunkter i kretsen, och högerledet b innehåller spänningen i ett antal spänningskällor i kretsen (och i övrigt nollor). Problemet är att spänningen inte är konstant i spänningskällorna, utan de varierar i praktiken lite grann kring värdena i b. För att veta hur det påverkar strömmen i kretsen och om de olika komponenterna klarar av dessa strömvariationer vill man nu simulera detta. I varje simulering beräknas ett nytt högerled b i som innehåller slumpmässiga variationer kring värdena i b, genom ett anrop till en funktion b_i = disturb_b(b). Efter detta beräknas strömmen genom att ekvationssystemet Ax i = b i löses. Detta ska upprepas k gånger, där k t ex kan vara 1000 eller 10000. Din uppgift blir nu att beskriva den övergripande algoritmen för att lösa detta problem på ett effektivt sätt. Till din hjälp finns ett antal redan färdiga funktioner som du väljer bland: x = gaussel(a,b), utför Gausselimination av ett system Ax = b Ainv = inverse(a), beräknar invers av en matris x = forwardsub(l,b), utför framåtsubstitution x = backsub(u,x), utför bakåtsubstitution [L,U,P] = LUfact(A), utför LU-faktorisering av en matris A b_i = disturb_b(b), redan beskriven ovan Du måste använda dessa funktioner, men du väljer de som är lämpliga för att lösa problemet. För högre betyg måste du även uppskatta beräkningstiden för din lösning, givet att n = 10000 och k = 1000 och tiden för en flyttalsoperation (t ex en multiplikation, addidtion etc) är t fl = 10 9 sekunder. 7. I en utredning om sjön Tämnaren i nordvästra Uppland mäter man sjödjupet i ett tvärsnitt av sjön där den är som bredast. Mätningen genomförs genom att man åker båt längs en rät linje från ena stranden av sjön till den andra. På olika ställen längs vägen mäter man sjödjupet med ekolod. Låt x 0 = 0 vara koordinaten för ena stranden, och x n koordinaten för den andra stranden och x j, j = 1,..., n 1 koordinaterna för mätpunkterna. Mätvärdet vid punkten x j betecknas med d j. Noggrannheten i ekolodsutrustningen medför att d j mäts med 3 exakta decimaler (dvs absoluta felet 0.5 10 3 ). Vid de två strandpunkterna är djupet noll. Djupmätningarna kan av praktiska skäl inte göras med helt jämna mellanrum i x-led, utan avståndet mellan intilliggande mätpunkter varierar. 4
Beskriv hur problemet skulle kunna lösas och ange med motivering vilken algoritm som är lämplig för att beräkna arean av det aktuella tvärsnittet av sjön. Skriv sedan ett program eller skissa på en algoritm för den metod du valt. Samtliga mätvärden ska utnyttjas. I ditt program kan du förutsätta att x- och d-värdena finns lagrade i två vektorer x respektive d. Ange även hur man skulle kunna uppskatta det totala felet i beräkningarna (här kan du för enkelhets skull anta att avståndet mellan intilliggande punkter inte varierar utan är densamma hela tiden). 5