STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik MD, ANL, TB (rev. JM, OE) SANNOLIKHETSTEORI I Instruktion för laboration 1 De skriftliga laborationsrapporterna skall vara skrivna så att en läsare allmänt bevandrad i sannolikhetsteori, men inte specifikt i laborationsuppgifterna, kan tillgodogöra sig resultaten. Observera att examinationen av laborationerna också beaktar den skriftliga framställningen förutom att uppgifterna är korrekt lösta. Kort introduktion till Linux Tryck Alt-F2 och skriv konsole. Om du skriver ls och trycker Enter får du en lista på kataloger och filer som ligger i din hemkatalog. Du kan skapa en katalog kallad sanno1 genom att skriva: mkdir sanno1 För att flytta dig till denna katalog, skriv cd sanno1 För att ta dig tillbaka kan du skriva cd.. Om du har rört dig mellan många kataloger fram och tillbaka och har tappat bort dig kan du skriva pwd För att ta dig tillbaka till hemkatalogen skriver du bara cd För att öppna ett program som till exempel Firefox (webbläsare) eller Thunderbird (Epostprogram) skriver du programmets namn. Vi ska i denna laboration använda Matlab, så öppna det genom att skriva matlab & (& gör att du kan använda samma Konsole till att öppna fler program.) Kort introduktion till Matlab Om du har använt Matlab förut kan du hoppa över den här delen. Gå till fönstret Command Window. Här kan man skriva kommandon som man vill ska utföras direkt. Säg att vi vill skapa en parameter p. p = 0.5 1
Observera att Matlab använder decimalpunkt istället för decimalkomma. Om vi vill att programmet inte ska skriva ut värdet på p lägger vi till ett semikolon p = 0.5; och om du vill att datorn skriver ut värdet på p senare så skriver du då p Om man vill att en parameter eller variabel ska vara en funktion av andra variabler går det bra. Exempel: q = 1-p Med om men sedan ger p ett nytt värde så ändras inte q automatiskt. Om man vill att Matlab ska skriva ut text så skriver man disp( min text ) Då man vill köra flera kommandon efter varandra så är det enklast att skriva in dem i en särskild fil, som Matlab sedan kan läsa in och utföra. Du kan använda vilken texteditor som helst för att skriva och redigera din kod, men mest praktiskt är till att börja med att använda Matlabs inbyggda. Öppna en ny fil under File New M-file. Spara den med ett lämpligt namn som skall sluta på.m (undvik att använda åäö i filnamn eller variabelnamn). Prova att skapa en ny m-fil som får heta Testfil.m med följande innehåll: x = 1 + 1; x^2 Se till att Matlab står i samma katalog där du sparade filen. (cd, pwd etc. fungerar även Matlabs Command Window.) Du kör filen genom att i Command Window skriva Testfil Blev resutatet vad du väntade dig? Något som används mycket när man gör beräkningar är s.k. loopar. I en loop upprepas ens kod ett antal gånger fast vi bara skriver ut den en gång. Exempel på en loop: Summa = 0; for i = 1:10 Summa = Summa + 2 Här kommer Matlab att räkna 0 + 2, 2 + 2,..., 18 + 2. En vektor U=(2,3 3,4 10 12) skrivs i Matlab U=[2.3 3.4 10 12]. Hakparenteser fås med tangenterna Alt Gr och 8 respektive 9. En vektor V=[0 1 2 3] kan man skapa genom kommandot V=0:3. Om man vill titta bara på en del av en vektor, till exempel det fjärde elementet i U eller de två första: U(4) U(1:2) 2
Att summera elementen i en vektor gör man mest effektivt genom att använda kommandot sum. Till exempel: sum(u) För att bara summera de första två elementen i U: sum(u(1:2)) Matriser skriver man in så här: W = [1 5; 4 5] Z = [4 4 6; 1 2 0.4] På samma sätt som man kan plocka ut delar av en vektor, kan man plocka ut delar av en matris. Prova W(1,2) W(1,1:2) Z(1:2,1:2) Z(1,:) Z(:,3) Multiplikation och division görs med hjälp av symbolerna * och /. Matlab uppfattar alltid * som matrismultiplikation. Prova t.ex. W*Z. Z*W fungerar inte eftersom Z är en 2 3-matris medan W är en 2 2-matris. För att transponera en matris Z skriver man Z. Z *W skall nu fungera. Om man sätter en punkt framför * och / så sker multiplikationen resp. divisionen elementvis. Prova t.ex. U.*V och U./V Det är mycket praktiskt att skriva kommentarer i sin kod så man kommer ihåg vad den handlar om. Kommentarer skriver man efter %, exempel: vektorn = zeros(1,5) % Skapar en matris med en rad och fem kolumner % som bara består av nollor for k = 1:5 vektorn(k) = k^3; % Element nr k ska vara lika med k^3 för k = 1,...,5 För den här laborationen kan det vara bra att veta att binomialkoefficienten ( n r) heter nchoosek(n,r). Om man vill veta mer om en funktion i Matlab så kan man skriva t.ex. help nchoosek eller help sum. Slutligen tar man bort en variabel så här: clear U tar bort variabeln U, och kommandot clear tar bort alla sparade variabler. Det kan vara bra att börja ditt program med det så att inte några gamla värden på variablerna påverkar din beräkning. 3
Spelet Keno Spelet Keno går till så här: Totalt finns 70 nummer (1 70) att välja på. Svenska Spel kommer att dra 20 nummer av dessa. Den som spelar ska (i förväg) försöka pricka in så många av dessa 20 som möjligt. Spelaren kan välja att totalt gissa mellan 1 och 11 nummer. Väljer han att gissa bara på ett nummer så kallas det Keno 1, gissar han på två nummer kallas det för Keno 2, osv. Denna laboration kommer att handla om Keno 11, dvs spelaren väljer 11 nummer och hoppas att Svenska Spel ska dra så många av dem som möjligt bland de 20 nummer de drar. Utdrag ur vinstplanen på Svenska Spels hemsida: Keno Antal rätt Vinst Genomsnittlig vinstchans Keno 4 160 kr 3 10 kr Keno 4 2 5 kr 1 0 kr 0 0 kr 1 på 3,1 Keno Antal rätt Vinst Genomsnittlig vinstchans Keno 11 5 000 000 kr 10 125 000 kr 9 3 000 kr 8 300 kr 7 30 kr 6 10 kr Keno 11 5 5 kr 4 0 kr 3 0 kr 2 0 kr 1 0 kr 0 0 kr 1 på 6,2 Redovisning av laborationen Svara på nedanståe uppgifter med hjälp av koden på följande sida. Räkna ut sannolikheten att få 0, 1, 2,..., 11 rätt på Keno 11. Kontrollera att summan av sannolikheterna blir ett! Gör ett diagram över sannolikheterna för olika antal rätt. Beräkna totala vinstsannolikheten, dvs chansen att överhuvud taget vinna något (0 kr = ingen vinst), och jämför med vad Svenska Spel påstår. 4
Kod till Keno 4 Vi ska nedan genomföra labben för Keno 4 men du ska göra den för Keno 11 (du måste alltså anpassa koden till Keno 11). Vid p(i+1) =... ska du skriva in ett eget uttryck (på föreläsningen ges uttrycket för Keno 4). % Laboration 1 % Uppgift 1 clear K = 4; % Keno 4 p = zeros(1,k+1); % Vi gör detta så att p ska ha rätt storlek. % p är en vektor som skall innehålla sannolik- % heterna för 0,1,...,K rätt, dvs K+1 tal. % OBS: p(1) kommer att vara sannolikheten för % noll rätt, p(2) sannolikheten för ett rätt, osv. for i = 0:K p(i+1) =... % p(i+1) är sannolikheten att få i rätt. disp( LABORATION 1 ) disp( Vinstsannolikheter ) p % Detta är alla sannolikheterna. sum(p) % Detta bör vara lika med ett. % Uppgift 2 x = 0:K; plot(x,p, *r ) % Kolla med help plot hur kommandot funkar title( Keno 4 )% om du vill ha en annan stil på plotten. xlabel( Antal rätt ) ylabel( Sannolikhet ) % Uppgift 3 disp( Jämförelse med Svenska spel ) Vinstsannolikhet = sum(p(3:k+1)) disp( Vinstsannolikhet enligt Svenska Spel är 1/3,1 ) 1/3.1 % Slut 5