STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. för matematisk statistik ANL/TB SANNOLIKHETSTEORI I, HT07. Instruktion för laboration 1 De skrifliga 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 laboration 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. 1
p = 0.5 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 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 4] kan man skapa genom kommandot V=0:4. 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) Att summera elementen i en vektor gör man mest effektivt genom att använda kommandot sum. Till exempel: 2
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 1 0.4] Testa W(1,2) W(1,1:2) Z(1:2,1:2) Z(1,:) Z(:,3) 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 Multiplikation och division görs med hjälp av symbolerna * och /. För att transponera en vektor V skriver man V. Prova nu W*Z Z*W Z *W U*V U *V U.*V V./U Vad händer om man sätter en punkt framför * och /? För den här laborationen kan det vara bra att veta att binomialkoefficienten ( n r) heter nchoosek(n,r). 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). Svenska Spel drar 20 nummer av dessa. Du som spelar ska sedan försöka gissa vilka nummer Svenska Spel har dragit. Du kan välja att gissa mellan 3 och 10 nummer. Om du gissar 3 nummer kallas det Keno 3, om du gissar fyra nummer kallas det Keno 4 osv. Den här laborationen kommer ast att handla om Keno 10. Utdrag ur vistplanen på Svenska Spels hemsida: Keno Antal rätt Keno Genomsnittlig Vinst i kronor vinstchans Keno 4 160 3 10 Keno 4 2 5 1 0 0 0 1 på 3 Keno Antal rätt Keno Genomsnittlig Vinst i kronor vinstchans Keno 10 1 000 000 9 25 000 8 1 000 7 100 6 20 Keno 10 5 5 4 0 3 0 2 0 1 0 0 5 1 på 7 * 5 kr = frispel på respektive Keno-nivå. Svara på nedanståe uppgifter 1 4 med hjälp av koden på följande sida. Uppgift 1 Räkna ut sannolikheten att få 0, 1, 2,...,10 rätt på Keno 10. Kontrollera att summan av sannolikheterna blir ett! Uppgift 2 Gör ett diagram över sannolikheterna för olika antal rätt. Uppgift 3 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 i sin broschyr. Uppgift 4 Beräkna väntevärdet av vinsten i kr vid ett spel. Räkna vinsten frispel som om den var värd 5 kr för att förenkla beräkningarna något. Extrauppgift Gör om uppgift 4 utan förenklingen att frispel är värt 5 kr. 4
Kod till Keno 4 Vi ska nedan genomföra labben för Keno 4 men du ska göra den för Keno 10. % Laboration 1 % Uppgift 1 clear K = 4; p = zeros(1,5); % p(i) är sannolikheten att antalet rätt är i-1. for i = 1:K+1 p(i) =... disp( LABORATION 1 ) disp( Uppgift 1 ) sannolikhetsfunktion = p summan_av_sannolikheterna = sum(p) % Uppgift 2 x = 0:K; plot(x,p, *r ) title( Uppgift 2 ) xlabel( Antal rätt ) ylabel( Sannolikhet ) % Uppgift 3 disp( Uppgift 2 ) Vinstsannolikhet = sum(p(3:k+1)) disp( Vinstsannolikhet enligt Svenska Spel är 1/3 ) 1/3 % Uppgift 4 vinst = [0 0 5 10 160]; disp( Uppgift 4 ) Medelvinst =... % Slut Vid p(i) =... och Medelvinst =... ska du skriva in egna uttryck. 5