• No results found

Numeriska metoder och grundläggande programmering för P1

N/A
N/A
Protected

Academic year: 2022

Share "Numeriska metoder och grundläggande programmering för P1"

Copied!
12
0
0

Loading.... (view fulltext now)

Full text

(1)

Laborationer i

Numeriska metoder och grundläggande programmering för P1

våren 2011

Namn . . . . Personnr . . . .

Lab 1 Introduktion tog timmar

Godkänt den . . . .(senast 31/1) Kvitteras . . . .

Lab 2 Programmering - Polynomanpassning tog timmar

Godkänt den . . . (senast 21/2+22/2 ger 1 bp) Kvitteras . . . .

Lab 3 Grafiska gränssnitt tog timmar

Godkänt den . . . (senast 3/3 ger 1 bp) Kvitteras . . . .

Lab 4 Ekvationslösning, m.m. tog timmar

Godkänt den . . . .(senast 1/4+4/4 ger 1 bp) Kvitteras . . . .

Lab 5 Diffekvationer, m.m. tog timmar

Godkänt den . . . (senast 3/5 ger 1 bp) Kvitteras . . . .

Lab 6 Projekt tog timmar

Godkänt den . . . .(senast 27/5) Kvitteras . . . .

1 (1) DN1212 Numeriska metoder och grundläggande programmering för P1 • våren 2011

Beatrice Frock och Staffan Romberger

(2)
(3)

Staffan Romberger 2010-12-13

DN1212/numpp Numeriska metoder och grundläggande programmering Laboration 1 – Introduktion

Efter den här laborationen ska du kunna använda de datorer som vi använder på labbarna, vektorer och matriser, villkorssatser och slingor samt skriva egna program som .m-filer.

Inledning

CSC har Linux- och Unix-datorer. I röd sal finns Solaris (tunna klienter) med Unix och i övriga salar körs Linux Ubuntu. När man har loggat in ser skärmen ut ungefär som på en persondator.

Linux Ubuntu:

Mitt på panelen längst ner finns knappar som väljer en av fyra olika skärmar (workspaces). Längst upp till vänster finns rullgardinsmenyerna Applications, Places och System.

Utloggning överst t.h.

Matlab startas under Applications>Programming>Matlab. Det blir ett terminalfönster i vilket matlab startas, så det fönstret kan inte användas till Unix-kommandon. Arbeta i Matlab-fönstret.

Terminalfönster startas under Applications>Accessories>Terminal.

Unix Solaris:

Panelen längst ner på skärmen har en launch-knapp till vänster som leder till en programstarts- och utloggnings-meny.

Applications>Programming>Matlab startar matlab,

Applications>Utilities>Terminal startar ett terminalfönster att skriva Unix-kommandon i.

Under Applications>Accessories finns bl.a Emacs och en enklare textredigerare, TextEditor.

Om du inte har använt Unix tidigare – läs introduktionen till Linux/Unix i kursbunten eller på webben <www.nada.kth.se/datorer/haften/unix/unix.pdf>.

Lite administration

Kursens webbplats finns på http://www.csc.kth.se/utbildning/kth/kurser/DN1212/numpp11.

CSC använder programmet Rapp för att registrera resultat på delmoment innan de skickas till Ladok. Se till att du är kursanmäld i Rapp, se kurswebbplatsen.

Initiera ditt konto för kursen

• Anslut dig till denna kursomgång genom att i terminalfönster skriva course join numpp11

Kommandot skapar en kurswebbsida åt dig och ser till att du får aktuella inloggningsmed- delanden från kursen.

• Om du ska labba ihop med någon bör du göra

1

(4)

course labdir numme labbkompisanv.

Se till att din labbkompis (som har användarnamn labbkompisanv) på sitt konto också ger motsvarande kommando (med ditt användarnamn) så kommer ni att få en gemensam katalog numme där ni kan spara de program som ni skriver i kursen.

Du som labbar ensam får istället skapa en egen katalog numpp11 med hjälp av filhanteraren.

Du kan, senare, kontrollera att dina labbar har blivit rapporterade.

Läs kurswebbplatsen

Vi kommer att använda webben för att sprida kursinformation. Starta en browser.

Ubuntu: Applications>Internet>Firefox Web Browser Solaris: Mozilla finns under launch-knappen.

Börja med att titta på den allmänna kurssidan och välj sedan din egen kursomgång (numpp11) i menyn. Du bör titta på webbplatsen minst en gång i veckan!

Handledning

Vi kommer att ha en kö till handledning på skrivtavlan i en av de bokade salarna. Skriv namn och platsbeteckning. Om du har egen (bärbar) dator kan du använda arbetsplatserna i korridoren utanför datorsalarna. Dessa har också platsbeteckning.

Starta Matlab

Ubuntu: Applications/Programming/Matlab, se ovan.

Solaris: Under launch-knappen, se ovan.

Matlab-uppgifter

Se kapitel 1 i kursboken för en repetition av Matlab-miljön.

Nedan finns ganska många uppgifter. Vid redovisningen ska du visa upp det du hunnit med idag.

På övriga labbar kommer du att ha haft mer tid på dig att förbereda dig, så då ska du vara beredd att redovisa alla uppgifter. Du ska dock ha hunnit med uppgiften där du gissar pumpans vikt.

Matlab som kalkylator

Genomför följande beräkningar (och hitta gärna på egna). Lägg dina kommandon i en m-fil och använd gärna mekanismen för cellindelning för att lätt kunna köra valda delar.

• Beräkna din ålder i sekunder. Uppskatta hur stort felet kan vara.

• Använd Matlabs inbyggda funktioner för att se att:

– Cosinus för π (som heter pi) är –1.

– Naturliga logaritmen för e är 1. Obs: Matlab vet inte vad e är. Gör help log och help exp.

– Kontrollera att logaritmen för en produkt är lika med summan av logaritmerna för faktorerna.

• Uppskatta din lästid (studietid) för varje dag den senaste veckan och lägg in värdena i en vektor.

– Använd bar för att få ett stapeldiagram över din lästid.

2

(5)

– Öka din lästid med en timme per dag – görs med ett kommando.

– Öka din lästid med 25 procent (tips: multiplicera med ett tal).

– Öka lästiden med 20 procent på vardagar men bara med 5 procent på helger. Tips:

multiplicera elementvis .* med en lämplig vektor.

• Skriv in en valfri 3x3-matris och undersök följande.

– Är dess determinant positiv?

– Kan man multiplicera den med en vektor från vänster och/eller höger? Vilka dimensio- ner måste vektorn ha i så fall?

– Kan man multiplicera den med en konstant? Med en annan matris, från höger och/eller vänster?

• Använd till sist who för att se vilka variabler som du har använt. Är du nöjd med variabel- namnen?

Gissa hur mycket pumpan väger

Skriv ett program som slumpar fram ett heltal mellan ett och hundra och låter den som kör programmet gissa vilket tal det är. För att det inte ska bli för svårt måste ditt program skriva ut meddelanden efter varje gissning, t.ex. så här:

Vad heter du? Anna

Hej Anna, hur mycket tror du min pumpa väger? 50 För mycket. Gissa igen: 20

För litet. Gissa igen: 25 För litet. Gissa igen: 42 För mycket. Gissa igen: 36

Rätt gissat. Nästa år ska jag odla en ännu större pumpa.

Datorn gissar

Skriv ett program som gissar vilken pumpavikt du tänker på. För varje gissning ska du tala om, på något sätt, för datorn om gissningen är rätt, för liten eller för stor. Först måste du komma på en bra algoritm som ger få gissningar!

Tillkalla handledare och redovisa!

3

(6)
(7)

Staffan Romberger 2010-12-13

DN1212/numpp Numeriska metoder och grundläggande programmering – Laboration 2 – Polynomanpassning

Introduktion

Efter den här laborationen ska du kunna skriva lite större program som är uppdelade i egendefini- erade funktioner.

Polynomanpassaren

Du ska skriva ett program som kan användas för att hantera polynom av godtycklig grad. Använda- ren ska via en meny kunna mata in gradtalet för ett polynom och ett antal punkter som polynomet ska anpassas till. Om punkternas antal är mindre än eller lika med gradtalet blir inte lösningen entydig. Meddela användaren det. Är punktantalet lika med gradtalet plus 1 går polynomet exakt genom dessa punkter, interpolationspolynomet. Är punktantalet ännu större konstrueras det bäst anpassade polynomet. Sedan, då användaren ber om det, ska polynomets koefficienter beräknas och polynomet och punkterna ritas upp. Dessutom ska användaren kunna få reda på vilka noll- ställen polynomet har. Se till att programmet kommer ihåg tidigare inmatade värden så att de kan återanvändas om de inte ändras.

Så här ska det se ut när användaren anger gradtal och punkter:

(8)

--- Polynomanpassaren --- 1) Ange gradtal

2) Ange punkter

3) Beräkna koefficienter 4) Plotta polynomet 5) Hitta nollställen 0) Avsluta

Ditt val: 1

Vilken grad ska polynomet ha? 2 --- Polynomanpassaren --- 1) Ange gradtal

2) Ange punkter

3) Beräkna koefficienter 4) Plotta polynomet 5) Hitta nollställen 0) Avsluta

Ditt val: 2

Ange punkter (retur avslutar inmatningen) Ange en punkt ([x y]): [1 1]

Ange en punkt ([x y]): [2 1]

Ange en punkt ([x y]): [3 2]

Ange en punkt ([x y]):

Du ska själv skriva en funktion för varje menyval utom »Avsluta». Så här ska de anropas från huvudprogrammet:

degree = askdegree(); – Frågar efter, läser in och returnerar gradtal.

points = askpoints(); – Frågar efter, läser in och returnerar punkterna.

coeffs = findcoeffs(degree, points); – Löser det linjära (ev. under- eller överbestämda) ekvationssystemet och returnerar polynomets koefficienter.

Du får inte använda polyfit; använd \-operatorn.

plotpoly(coeffs, points); – Ritar upp polynomet och punkterna samt nollställena om de har beräknats.

polyroots(coeffs); – Bestämmer polynomets nollställen.

Utöver funktionerna ovan är det vettigt att skriva en funktion som bara skriver ut menyn. Skriver du programmet på det sättet blir koden i huvudprogrammet mer överskådlig. Där du anropar menyfunktionen i huvudprogrammet kan det se ut så här:

meny();

choice = input(’Ditt val: ’);

Då användaren ber om att koefficienterna ska beräknas, ska de också skrivas ut. Innan dess måste han/hon ha angett gradtal och punkter.

Innan programmet ritar upp grafen måste det ha beräknat koefficienterna. När användaren byter gradtal eller punkter ska programmet glömma koefficienter och nollställen.

Grafen för exemplet ovan blir:

Tips, trix och krav

• Förslag på arbetsordning:

1. Börja med att konstruera tomma funktioner.

2. Konstruera menyn och anropa för respektive val de tomma funktionerna. Inget ska hända när användaren väljer något.

(9)

0 0.5 1 1.5 2 2.5 3 3.5 4 0.5

1 1.5 2 2.5 3 3.5 4

Polynomet

x

y

+ 0.5x2 − 1.5x + 2

3. Gör färdigt funktionerna i tur och ordning.

4. När du är färdig med de två första funktionerna är det skönt att temporärt lägga in värden på gradtal och punkter direkt i koden, så du slipper skriva in det varje gång du ska prova resten av funktionerna. Kom ihåg att ändra tillbaka sedan!

• Grafen:

– Använd plot för att rita polynomet. Programmet bör rita ut polynomet över ett inter- vall som täcker in punkterna. Ta fram min och max för punkternas x-värden! Från en vektor av x-värden beräknas y-värdena med polyval eller en for-slinga.

– I grafen som ritas ska en »legend» (teckenförklaring) innehålla polynomets grad och koefficienter.

Frivilligt: gör sådan »legend» som syns i exempelgrafen.

• Använd roots för att beräkna nollställena.

• Som avbrottsvillkor vid inmatning av punkter kan du använda att det inmatade har en längd som är skild från två (punkterna är ju vektorer med längden två).

• Du får inte använda några globala variabler!

Lycka till!

(10)
(11)

Staffan Romberger 2010-12-13

DN1212/numpp Numeriska metoder och grundläggande programmering – Laboration 3 – Kryptering

Efter den här laborationen ska du kunna hantera text som data och själv kunna skapa enkla grafiska användargränssnitt (GUI).

Översikt

Kryptering har blivit en del av vår vardag även om vi inte tänker så mycket på det. När du loggar in på din personliga banksida eller pratar i mobiltelefon sker kommunikationen krypterat. I denna laboration ska du skriva ett program som analyserar en krypterad text och sedan dekrypterar den.

Ditt program ska läsa och dekryptera en text på engelska som finns på fil. Det finns många olika algoritmer för kryptering men vi förutsätter att texten är krypterad med »caesarrullning» vilket innebär att varje bokstav har bytts mot en bokstav ett visst antal steg framåt i alfabetet. Med 2 positioners förskjutning blir »The zebra has stripes» krypterat till »Vjg bgdtc jcu uvtkrgu». Med vetskap om att »e» är den vanligaste bokstaven i engelsk text kan texten dekrypteras med hjälp av ett frekvensdiagram. Om t.ex. bokstaven »g» är den mest frekventa i kryptotexten kan vi gissa att förskjutningen är 2 steg. Gränssnittet för ditt program bör se ut så här:

1

(12)

Ditt program bör lämna andra tecken än bokstäver oförändrade. Tårtdiagrammet ska innehålla de 10 mest frekventa bokstäverna. Det blir dessutom enklare om du gör om alla bokstäver till versaler.

På kursens webbplats finns filer med krypterade texter som du kan använda när du testar.

Om du vill kan du bygga ut programmet så att det också kan hantera åäö. Dessa bokstäver har inte teckenkoder intill a–z.

2

References

Related documents

Innan Tova går in i klassrummet för att skriva ett prov brukar hon tänka att klasskamraterna är mycket intelligentare än henne och kommer att prestera mycket bättre än vad hon

Denna låt blev inte som jag hade tänkt mig då min pianist spelade låten på annat sätt än hur jag spelade den när jag komponerade den.. Jag gav honom friheten att tolka fritt och

V˚ ara *-or st˚ ar allts˚ a f¨or de valda elementen och vilka streck de st˚ ar emellan st˚ ar f¨or vilket element det ¨ar

Tack vare live-programmeringen borde användarna få en djupare förståelse för vad deras kod gör, samtidigt som den adaptiva algoritmen kan avgöra hur vidare användaren bör

Här kan du sätta in egna mallar och blanketter (t ex pouleprotokoll). Besök www.fencing.se och ladda ned det du behöver!.. Poule Pist President..

När du har kvistat hela stammen på höger respektive vänster sida, samt på ovansidan, vänder du hela stammen för att komma åt grenarna undertill.. Vid behov kan du kapa stammen i

Skriv ett program där du använder pq-formeln för att lösa andragradare börja med att testa på samma funktion som uppgift 2.. Med p,q-formeln kan du

Verb som redogör och diskutera kan ge indirekta uppmaningar till att använda textaktiviteterna beskrivning och förklaring men eftersom dessa verb behöver tolkas utifrån