Tentamen i: Beräkningsvetenskap I och KF Skrivtid: 9 januari 2017 kl 08 00 11 00 OBS! 3 timmar! Hjälpmedel: Endast penna, suddgummi, miniräknare och linjal får användas. Formler finns i bifogad formelsamling. Övrigt: Uppgifterna måste vara välskrivna, med alla ingåe tankesteg redovisade. Endast svar på förtryckt svarsblankett beaktas. Observera att tentamen rättas baserat på kursmål. Mål: 1 Nyckelbegrepp Visa förtrogenhet med nyckelbegrepp som ingår i kursen 2 Algoritmer Visa förtrogenhet med de algoritmer som ingår i kursen 3 Analys Visa förtrogenhet med de analysförfaranden som ingår i kursen 4 Programmering Visa elementär förtrogenhet med programmering(mer avancerad programmering görs i grupp och framför dator) Uppgift 1: Metodbegrepp (a) En integrationsmetod A närmar sig den exakta lösningen snabbare än metod B när steglängden i diskretiseringen minskar. Detta beror sannolikt på att metod A, relativt metod B, har 1. högre noggrannhetsordning 2. mindre konditionstal 3. mindre avrundningsfel 4. fler iterationer. Förklara ditt val, dvs sätt det i ett sammanhang. Uppgift 2: Högre noggrannhetsordning, vilket är ett mått på hur snabbt diskretiseringsfelet minskar när man har mindre och mindre steglängder. Om felet blir en fjärdedel så stort när steglängden halveras, är exempelvis noggrannhetsordningen 2. Med Newton-Raphsons metod nås normalt kvadratisk konvergens. Beskriv i korthet vad detta innebär. Antalet korrekta decimaler dubbleras vid varje iteration (egentligen under villkor att vi redan kommit nära korrekt resultat). Mer generellt kan vi säga att felet minskar kvadratiskt. Vi kan alternativt uttrycka det så att felet E n+1 CE 2 n, där C är en konstant och felet i iteration n är E n. Hydrostatiskt tryck 3 I miniprojekt 2 i den här kursen beräknades det hydrostatiska trycket för en specifik damm enligt modellen F = 20 0 p (20 y) w(y)dy där p = 62.5 och värden för w(y) har mätts upp enligt y 0 5 10 15 20 w(y) 20.00 20.05 20.25 20.51 21.18
(a) Beräkna nu värdet på F för hand med Simpsons metod med steglängd h = 5. Skapa tabell med värden för integranden g(y) = p (20 y) w(y) : g(0) = 62.5 * (20-0) * 20.00 = 25000 g(5) = 62.5 * (20-5) * 20.05 = 18797 g(10) = 62.5 * (20-10) * 20.25 = 12656 g(15) = 62.5 * (20-15) * 20.51 = 6409.4 g(20) = 62.5 * (20-20) * 21.18 = 0 S(5) = 5 / 3 * ( 25000 + 4*18797 + 2*12656 + 4*6409.4 + 1*0 ) = 251896 Man har nu gjort noggrannare mätningar av dammen med steglängden h = 0.5 och beräknat kraften av dammen till F = 252080.8349. En beräkning med varannan mätpunkt (dvs h = 1) ger F = 252080.81650. Gör en feluppskattning av diskretiseringsfelet (med hjälp av femtondelsregeln). Uppskatta också hur mycket ytterligare steglängden måste minskas för att få ett fel mindre än 0.00008 om man bortser från funktionsfelet. E S(0.5) = (252080.8349 252080.81650)/15 0.001227 Felet i Simpsonsmetoden är E S(h) = O(h 4 ) där h är steglängden. Vi vill bestämma h så att E S(h) 0.00007, men 0.00008 0.001227/2 4 0.00007 h = 0.5/2 = 0.25. Uppgift 3: Newton-Raphson Lös följande ekvation genom att utföra två iterationer med Newton-Raphson. Använd startgissningen x = 1 och redovisa x-värdena samt en uppskattning av det absoluta felet efter varje iteration. 2sin x +3x = 5 (1) 2 Iteration 1: Iteration 2: f(x) = 2sin x 2 +3x 5 f (x) = cos x 2 +3 x n+1 = x n f(x n) f (x n ) x 1 = 1 f(1) f (1) 1.2685046, x 1 x 0 0.2685046 x 2 = x 1 f(x 1) f (x 1 ) 1.2709577, x 2 x 1 0.00245308 Uppgift 4: Icke-linjära ekvationer Vid tillämpning av bisektionsmetoden för att lösa en ekvation f(x) = 0 har de sista två iterationerna gett följande uppskattningar: x 3 = 0.2343750 x 4 = 0.2421875 Behövs fler iterationer om två decimalers noggrannhet önskas? Ja. Feluppskattningen x 4 x 3 ger 0.0078125 vilket är större än 0.5 10 2.
Uppgift 5: Programmeringskunskap (a) Skriv den matematiska funktionen c(x) = cosx 1+x 2 som en MATLAB-funktion. Den ska skrivas så att den kan ligga på en egen fil. Motivera också vad denna fil ska heta. function r = c(x) r = cos(x)./ ( 1 + x.^2 ); Filnamnetkan(menvibrukaravrådaifråndet)varaannatänfunktionsnamnet. Ändelsen måste vara.m och i svaret måste du ha motiverat skillnaden om du valt olika namn. Någon har skrivit ett Matlab-program för demonstrera hur man kan summera elementen i en vektor som benämns A. För att testa programmet, har man fyllt A med värden men när man provkör fungerar inte programmet som det är tänkt. Av någon anledning har raderna hamnat i fel ordning. Tala om vilken ordning raderna ska stå i för att programmet ska fungera som det är tänkt, dvs i testfallet beräkna summan till 21. Ange svaret som en lista över nuvarande radnummer i den korrekta ordningen (som står i vänsterkanten). 1 2 3 4 5 6 7 summa = 0; disp summa; A = [1 3 4 5 3 5]; for index = 1:length(A) summa = summa + A(index); disp( Summan av elementen ); Ordning 4 2 (eller 2 4) 5 6 1 7 (rad 7 kan teoretiskt komma tidigare men inte snyggt) 3 vilket är: Uppgift 6: A = [1 3 4 5 3 5]; % testvektor summa = 0; for index = 1:length(A) summa = summa + A(index); disp( Summan av elementen ); disp summa; Busslinjesystem Max målbetyg: 4 Ett busslinjenät har knutpunkterna A, B, C, och så vidare. En del av detta system visas i figuren nedan. F / A --- B ---- C----- \ \ \ G------D----E Figur 2: Del av busslinjenät. Bussbolaget vill öka sin vinst genom att ha en mer flexibel prissättning som anpassas efter efterfrågan. För att beräkna de optimala biljettpriserna har bolaget ställt upp ett linjärt ekvationssystem, där koefficientmatrisen enbart beror av linjenätets utformning, och
antalet obekanta är lika med antalet delsträckor. För att beräkna priserna behöver ekvationssystemet lösas för där ett stort antal, p stycken, högerled, som beror på tidigare års passagerarunderlag. Ett Matlab-program har skrivits för att beräkna biljettpriserna, som för varje högerled använder Gausseliminering för att lösa ekvationssystemet. Där finns en funktion get rhs() som hämtar och returnerar nästa högerled (ett högerled), och en funktion is done() som returnerar 0 om det finns fler högerled att räkna på, eller 1 om alla högerled har hanterats. Nu vill bolaget anpassa sitt program för ett betydligt större busslinjenät. Föreslå en effektiv lösning, med en skiss på algoritmen. Utför även en analys som visar att din lösning kräver mindre beräkningskraft än deras nuvarande kod. [P,L,U] = lu(a); while(1 isdone()) b = get rhs (); y = L\(P b); x = U \y; Eftersom det linjära systemet lösas med flera högerled, blir det effektivt att LU faktorisera matrisen A och lösa triangulära system L \ (Pb) och U \ y. En vanlig backslash A \ b kostar O(n 3 ) där n är storleken av matrisen. Å andra sidan, att lösa ett triangulärt system kostar O(n 2 ), och det blir effektivare att lösa ett triangulärt system flera gånger (i jämförelse med en vanlig backslash). Uppgift 7: Svandammen Max målbetyg: 5 Svandammens pumpsystem och botten är fulla med slam, dy och en del skräp. Dammen behöver då tömmas på vatten för att man ska kunna rensa botten och pumpsystem. I projekteringen av arbetet behöver stadsbyggnadsförvaltningen veta hur mycket vatten dammen innehåller och därmed beräkna projekttiden det tar att tömma dammen. Denna uppgift tillfaller dig. Det du gör då är att du spänner en lina tvärs över Svandammen med markeringar för varje meter. Det gör att du då lätt kan mäta djupet på bestämda avstånd. Djupet mäter du med lodning, dvs släpper ner ett sänke tills det når botten och läser av djupet. På så sätt får du en mätserie för ett tvärsnitt av dammen vilket ger en tvärsnittsarea i djupled. Därefter flyttar du linan ett litet avstånd längs med dammen och gör nya mätningar. Detta återupprepas för hela dammens längd, se bild nedan. Beskriv detaljerat hur du kan utifrån dessa mätningar bestämma tiden det tar att tömma dammen, givet att du vet pumpkapaciteten. Resonera vilka felkällor som finns och hur du kan göra en feluppskattning av resultatet. Figure 1: Vi mäter djupet i linjer tvärs över dammen vid bestämda markeringar.
Först beräknar man tvärsnittsarean i djupled för varje serie av mätningar längs repet. Det kan man göra med Simpsons formel (serien kan anpassas så att antalet delintervall blir jämnt genom att lägga punkter även på land, dessa punkter bidrar inte då djupet är noll). Därefter får man volymen genom att integrera tvärsnittsareorna mha Simpsons formel (eller trapets om mätningarna sker på olika avstånd). Tiden att tömma dammen får man med T=V/C där C är pumpkapaciteten. Felkällor: Diskretiseringsfel pga mätavstånd. Funktionsfel pga mätfel i lodningen. Felfortplantning pga fel i pumpkapaciteten. Diskretiseringsfelet för tvärsnittsareorna kan uppskattas med 15-delsregeln. Dvs man beräknar areorna med dubbla steglängden (tar bara varannan mätpunkt) och uppskattar Rs(h)=(Is(h)-Is(2h))/15. Diskretiseringsfelen integreras därefter över längden av dammen för totala bidraget. (Alternativt kan man se det som ett funktionsfel i tvärsnittsareorna och ta det maximala diskretiseringsfelet och multiplicera med dammlängden). Till det tillkommer även ett diskretiseringsfel för integrationen i längdled som kan uppskattas med 15-delsregeln (eller 3-delsregeln för trapets) på samma sätt. Mätfelet i lodningen är Ef cm och ger då ett funktionsfel Ef*bi för varje tvärsnittsarea (bi-bredden av dammen). Dessa funktionsfel integreras över längden av dammen. Alternativt får man totala funktionsfelet genom multiplicera mätfelet med dammens area över mätområdet. Pumpens noggrannhet är ym 3 /s. En övre begränsning på tiden får man genom att ta den övre begränsningen dammens volym (inkluderat alla fel) och dividera med pumpens undre kapacitet C-y. En undre begränsning på tiden fås genom att ta den undre begränsningen av dammens volym och dividera med pumpens övre kapacitet C+y. Övriga fel som påverkar beräkningarna: Botten är inte en jämn funktion utan kan vara diskontinuerlig pga diverse skräp vid lodpunkterna (vi får felaktiga data, felformlerna gäller heller inte). Lodningarna sker inte på bestämda punkter (ojämnt avstånd, då stämmer inte Simpsons formel). Linan kan vara sned och inte parallell med tidigare mätningar (då blir det fel när vi integrerar i längsled). Eventuell nederbörd under tömningen som som fyller på vattenvolymen. Listan kan göras lång med fler felkällor.