22 januari 214 Miniprojekt 1 (6) Beräkningsvetenskap I/KF Institutionen för informationsteknologi Beräkningsvetenskap Besöksadress: ITC hus 2, Polacksbacken Lägerhyddsvägen 2 Postadress: Box 337 751 5 Uppsala Telefon: 18 471 (växel) Telefax: 18 51 19 25 Hemsida: http://www.it.uu.se Department of Information Technology Division of Scientific Computing Miniprojekt: Vattenledningsnäten i Lutorp och Vingby 1 Du är nyanställd på konsultföretaget Pollax Pipes AB i vattenledningsbranchen och du har nu blivit engagerad i ditt första uppdrag vid tekniska kontoret i Gaussby kommun. Din uppgift är att kontrollera att vattenledningsnätet i den lilla tätorten Lutorp är väldimensionerat, och sedan skriva ett program med vars hjälp man kan bygga ut vattenledningsnätet i den lite större tätorten Vingby. Del 1 Före den planerade utbyggnaden består Lutorp av ett fåtal bostäder. De är anslutna till en egen del av det kommunala vattenledningsnätet. Hos Tekniska kontoret i Gaussby kommun finns en schematisk skiss över det lokala vattenledningsnätet i Lutorp före utbyggnaden. (Se Figur 1.) Visiting address: ITC bldg 2, Polacksbacken Lägerhyddsvägen 2 Postal address: Box 337 SE-751 5 Uppsala SWEDEN Telephone: +46 18 471 (switch) Telefax: +46 18 51 19 25 Web page: http://www.it.uu.se Figur 1: Skiss av vattenledningsnätet i Lutorp. Noderna (knutpunkterna) i nätet är numrerade 1, 2, 3, 4, 5, 6. Till nod 1 är en vattenreservoar ansluten, och nod 5 och 6 är kopplade till avtappningskranar i två bostäder. Tryckvärdena i de olika noderna betecknas med p 1, p 2, p 3, p 4, p 5 respektive p 6. Ditt uppdrag är beräkna trycket i de inre noderna (2, 3 & 4) och se till att vattentornet är dimensionerat så att trycket i dessa noder är tillräckligt högt. 1 Del 1 baseras på Problem 5.1 i A. Quarteroni & F. Saleri, Scientific Computing with MATLAB, Springer-Verlag Berlin Heidelberg, 23
2 (6) Matematisk modell Trycket anges som skillnaden mellan vattentrycket och det omgivande atmosfäriska trycket. I beräkningarna används därför en skala där det atmosfäriska trycket sätts till. För beräkningen av trycket används följande samband: 1. För rörledning nummer j kan vattenflödeshastigheten Q j (i m 3 =s) uttryckas: Q j = k A L (p in p ut ) : (1) Beteckningar: 1=k är det hydrauliska motståndet i den aktuella rörledningen, så k är inversen av det hydrauliska motståndet vilket mäts i m 2 =bar s. A är rörledningens tvärsnittsarea i m 2, L dess längd i m. p in är trycket vid inloppet till rörledningen och p ut är trycket vid utloppet från samma rörledning, där trycken mäts i bar. I det här fallet är k konstant och lika med :1. 2. Summan av flödena in till en knutpunkt är lika med summan av flödena ut från samma knutpunkt. Samband 2 ovan ger följande ekvationer för de tre inre noderna i Lutorps vattenledningsnät (se Figur 1): Punkt 2: Q 1 = Q 2 + Q 3 Punkt 3: Q 3 = Q 4 + Q 6 Punkt 4: Q 2 + Q 4 = Q 5 för de rörled- Tekniska kontoret tillhandahåller en tabell över värdena på k och A L ningar som ingår i Lutorps vattenledningsnät före utbyggnaden: rör A=L rör A=L 1 3 4 6 2 5 5 5 3 5 6 5 Vidare är trycket i vattenreservoaren 1 bar och trycket p vid avtappningsställena cirka bar. Genom in sambandet (1) i ekvation 2 och värdena för k och A, får vi efter förenkling följande system av sex ekvationer för trycken i de olika L noderna: B @ 1: :3 1:3 :5 :5 :5 1:6 :6 :5 :5 :6 1:6 :5 1: 1: 1 C B A @ p 1 p 2 p 3 p 4 p 5 p 6 1 = C B A @ 1 1 C A (2)
3 (6) Uppgift Skriv i Matlab ett program (ett matlabscript/kommandofil) som ställer upp detta system, löser det med Matlabs inbyggda backslash -operator samt skriver ut lösningen. Dessutom ska programmet rita upp en graf över trycket i de olika noderna. Utskriften och grafen ska vara sådan att dina uppdragsgivare på Tekniska kontoret förstår den utan att du behöver ge någon kompletterande, muntlig information. I grafen ska man på x-axeln se knutpunkternas nummer och i y-led de beräknade tryckvärdena. Förutom ovanstående vill man kontrollera att trycket i systemet är tillräckligt högt genom att beräkna medeltrycket. I Lutorp vill man inte att medeltrycket ska understiga 2 bar. Medelvärdet över trycken kan beräknas med hjälp av MATLABs inbyggda funktion mean. Om p är en vektor så beräknas medelvärdet genom kommandot medeltryck = mean(p); (där medeltryck och p är variabler och kan ersättas med vilka variabelnamn som helst). Lägg till beräkning av medelvärdet till ditt program. Använd sedan ditt program för att se hur högt trycket i vattentornet minst måste vara för att medeltrycket ska bli minst 2 bar. Tips: När du ska skriva matlabprogram, dvs ett matlabscript, skriv och testa gärna kommandon direkt i kommandofönstret, för att se hur de och olika delar av problemet fungerar och kan lösas. Det brukar sällan bli rätt om man skriver ett helt program direkt i en m-fil.
4 (6) Del 2 I Gaussby kommun ska en lite större tätort, Vingby, byggas ut kraftigt och det behövs en motsvarande utbyggnad av vattenledningsnätet. Vingby är beläget runt några sjöar med befolkningen koncentrerad kring stränderna. En av sjöarna är formad som en flygplansvinge, därav namnet Vingby. Det ska byggas tre vattentorn, och uppdraget består i att dimensionera dessa för att trygga vattenförsörjningen. Precis som i Lutorp vill man inte att medeltrycket i Vingbys vattenledningsnät ska understiga 2 bar. Man vill även ha en jämn fördelning av trycket i nätet. Medelvärdet av trycket kan beräknas med hjälp av MATLABs inbyggda funktion mean precis som tidigare, och jämn tryckfördelningen kan beräknas med den s k standardavvikelsen 2. Det är ett mått från statistiken som beskriver hur mycket något varierar kring medelvärdet. Ett lågt värde på standardavvikelsen innebär en liten variation, dvs ett jämnfördelat tryck. I Matlab kan standardavvikelsen beräknas med hjälp av den inbyggda funktionen std som tar en vektor som indata, t ex enligt tryckvariation = std(p); Slutprodukten i den här uppgiften ska vara två program som utför samma sak, men det ena programmet är effektivare än den andra. Slutprodukten motsvarar resultaten i punkt c. och d. nedan. Här är det fråga om tusentals noder och att lägga in ett sådan ekvationssystem i Matlab för hand blir omöjligt. Därför har ditt konsultföretag skapat ett program för att hantera detta. Det programmet är redan färdigt, och består av en matlabfunktion som finns i filen GenerateMatrix.m. Den funktionen genererar automatiskt matrisen utifrån indata som beskriver ledningsnätet. Dessa indata ska finnas i tre textfiler, som ska namnges så att ändelserna blir.coords.txt,.graph.txt respektive.source.txt. Det avslutande.txt kan uteslutas i alla tre fallen om man vill, men det kan vara bra att använda den ändelsen eftersom din dator då automatiskt öppnar filen med en texthanterare om du öppnar filen. Om du exempelvis ska använda GenerateMatrix för problemet i Del 1, dvs lutorp och ger kommandot [A, sources] = GenerateMatrix( lutorp ); så ska det i den katalog där du arbetar då finnas tre textfiler: lutorp.coords.txt, lutorp.graph.txt och lutorp.source.txt. Förutom systemmatrisen A, returneras även vektorn sources som innehåller index för de noder som är källor (dvs bara 1 för Lutorp). Dessutom ritas en bild över vattenledningsnätet upp, med blå punkter för öppna kranar, och röda punkter för vattentorn. Man måste inte använda just variabelnamn A eller sources, utan man kan välja andra lämpliga variabelnamn. För mer information om GenerateMatrix, se programmets hjälptext. Uppgift När man löser lite större problem som det här är, är strategin att man löser lite i taget. Man börjar med med enklast möjliga lösning, och bygger ut successivt tills man har den färdiga slutprodukten. Dessutom inleder man vanligen med att lösa q P 2 1 N Standardavvikelsen är definierad som p := N i=1 (pi p)2, där p är p:s medelvärde.
5 (6) ett lite mindre problem så man får en uppfattning över vad som händer och hur funktioner fungerar, dvs man får en förståelse för problemet. Här följer ett förslag på en sådan strategi som du kan följa: a. För att förstå hur programmet fungerar och hur det används, börja med samma exempel som i Del 1, dvs Lutorp. Ladda ner GenerateMatrix.m från kurshemsidan. Ladda dessutom ner de tre textfilerna lutorp.coords.txt, lutorp.graph.txt och lutorp.source.txt, som innehåller de data som krävs för fallet Lutorp. Testa sedan att anropa GenerateMatrix i kommandofönstret och jämför med matrisen och figuren i Del 1. Undersök (titta i) de tre textfilerna och försök förstå hur de siffror som finns där stämmer överens med figuren över vattensystemet i Lutorp. När detta är gjort skriver du Matlabprogram (matlabscript/kommandofil) som skapar matrisen A för Lutorp med hjälp av GenerateMatrix, konstruerar högerled och löser systemet (med standardmetoden i Matlab). Alla ekvationer utom den första har i högerledet. Värdet i första ekvationens högerled är p r, dvs vattentrycket i reservoaren. Skriv programmet så att användaren själv kan mata in p r från kommandofönstret när programmet körs. Resultatet ska presenteras i en graf där man på x-axeln ska se knutpunkternas nummer och i y-led de beräknade tryckvärdena. Lös Lutorp-problemet med samma vattenreservoarstryck som i Del 1 och jämför resultaten. Skapa gärna en egen stad, t ex MinStad, genom att skriva egna filer: MinStad.coords.txt, MinStad.graph.txt och MinStad.source.txt (du kan utgå från lutorp-filerna). Beräkna trycket i detta vattenledningsnät med hjälp av programmet du skrev i föregående uppgift. b. När du förstår hur man ska använda GenerateMatrix kan du gå vidare till att lösa problemet för området Vingby. Ladda först ner de tre textfiler från kurshemsidan, som innehåller de data för Vingby som krävs. Kopiera programmet i föregående uppgift och modifiera kopian så att användaren får mata in namnet på fallet, t ex lutorp för Lutorp, vingby för Vingby eller MinStad för din egen stad. Observera att Vingby har flera vattentorn som användaren skall kunna bestämma trycket i. Programmet ska kunna fungera oberoende av hur många vattentorn som finns i nätet. Det ska alltså automatiskt fråga efter tryck i rätt antal vattentorn och skapa högerledet efter detta. Här måste du använda en programmeringskonstruktion. c. Precis som i Lutorp vill man att medeltrycket i Vingbys vattenledningsnät inte ska understiga 2 bar. Man vill dessutom ha en jämn tryckfördelningen, vilket man kunde beräkna med den standardavvikelsen enligt ovan. Utvidga nu programmet så att användaren kan ge olika värden på trycken i vattentornen, så att man kan komma fram till en fördelning som är jämn och tillräckligt hög. När användaren testar olika tryck i vattentornen skall medeltryck och standardavvikelse visas på skärmen. När resultatet har presenterats, så ska användaren ges möjlighet att mata in nya tryck i vattentornen, titta på resultatet, mata in nya tryck i vattentornen igen etc. Detta upprepas tills användaren väljer att inte mata in ytterligare värden. Det är inte säkert att
6 (6) användaren vill se en graf efter varje test, och därför ska detta kunna väljas efter varje beräkning. När du är klar med detta har du nått slutprodukten, och det här programmet redovisas. d. När man kör många test, är det viktigt att det inte tar för lång tid att köra programmet. Kanske finns det ett sätt att snabba upp beräkningarna? Fundera ut och implementera ett effektivare sätt att utföra de upprepade beräkningarna, så att resultaten från tidigare beräkningar så långt som möjligt återanvänds när nya tryck behandlas. Redovisa även detta förbättrade program. Redovisa även något körexempel. Del 3 - Diskussion och reflektion När uppgiften är klar är det viktigt att ni i gruppen reflekterar över vad ni gjort, hur ni arbetet och vad ni lärt er. Det är också viktigt att relatera det ni gjort till mer teoretiska delar av kursen, t ex olika nyckelbegrepp. Fundera exempelvis på och skriv några rader om Vad har ni lärt er i uppgiften? Vilka är t ex de två viktigaste lärdomarna? Behandla inte enbart att ni lärt er vissa delar i Matlabanvändning, utan även mer teoretiska kunskaper. Var det något som ni tyckte var särskilt svårt? Och hur löste ni det i så fall? Försök även koppla samman det ni gjort i uppgiften med olika nyckelbegrepp inom momentet linjära ekvationssystem. Ovanstående är ett förslag och det kan finnas annat som ni vill diskutera. Inget som ni skriver kommer att bedömas som fel, utan det viktiga är att ni reflekterar.