Ett hasardspel med tärning + en simulation av spelet

Bilderna förklarar själva problemet. Filen finns i BOX-verktyget, programarkivet. Namn: Väntevärde.tns.

Sedan simulerar vi spelet med ett  program

Vi tar oss en titt på programmet:

Define väntevärde()=
Prgm

Local vv,n,i,re                            Variablerna definiers som variabla

0→vv                                            Variabeln vv visar det förväntade värdet på vinst/förlust

Request ”Antal kast”,n            Antal kast fastställs

For i,1,n                                       En loop initieras

re:=int(6*rand())+1                  Tärningen ”kastas”. Resultat = re

vv-1.5→vv                                    Spelinsatsen betalas

If mod(re,2)=1 Then                Udda/jämnt kollas. Här udda. Obs hur mod-kommandot används!

vv-2→vv                                       Spelförlust på 2 euro

EndIf                                            Slut på kollen udda

If mod(re,2)=0 Then               Udda/jämnt kollas. Här jämnt.

vv+re→vv : EndIf                      Spelvinst utbetalas.

EndFor                                        Slut på kolen jämnt

Disp vv                                        Resultatet vv visas

EndPrgm                                    Programslut

Födelsedagsproblemet

Vi ska nu behandla ett standardproblem inom sannolikhetsläran. Frågan lyder:

Hur många personer kan komma in i ett rum, innan sannolikheten för att åtminstone två av dem har gemensam födelsedag blir större än 0,5?

Vi ska utnyttja ett mycket behändigt kommando här.

seq(formel, variabel, start, slut, (steg))

bildar en talföljd (sequence) som genereras av formeln. Vi ser på ett exempel:

Kommandot genererar en talföljd i listform av kvadraterna på talen 1 till 10.

Man kan också göra beräkningar med talen i talföljden. Summan av alla tal från 1 till 100 kan beräknas så här:

Nu till vårt problem.

Komplementet till att åtminstone två personer i en grupp har samma födelsedag, är att alla har olika födelsedagar. Vi beräknar alltså för n personer sannolikheten:

P(”åtminstone 2 gemensamma födelsedagar av n”) = 1 – P(”alla n har unika födelsdagar”)

Vi antar att året har 365 dagar.

Då första personen anländer i rummet, har han en unik födelsedag med sannolikheten365/365 = 1. Andra som kommer in har en unik födelsedag med sannolikheten 364/365 osv. Hur kunde man få fram antalet som kommer in för att villkoret i uppgiften ska gälla. Här är ett par möjligheter:

Beräkningen visar att 5 personer har unika födelsedagar med sannolikheten 0,97. Man kan fortsätta att prova sig fram genom att kopiera (gå upp till uttrycket med kursorn och tryck på Enter) skärmens sista rad och ändra 5 till andra värden. Här är några försök:

Då den 23 personen träder in i rummet, förvandlas sannolikheten för att det finns åtminstone två gemensamma födelsedagar, till större än 50 %.

Här är ett förslag på det:

De stora talens lag

Nu ska vi undersöka ett fenomen inom sannolikhetsläran. Vid ett stort antal slumpförsök, kommer det totala resultatet att konvergera mot ett väntevärde. Om man t.ex. singlar slant tillräckligt många gånger, kommer antalet kronor att närma sig 50 % av totala antalet resultat.

Filen som här presenteras finns i BOX-rutan i arkivet Sanolikheter.

Vi simulerar detta med ett litet program. Först en förklaring på Anteckningar-skärmen. Sedan startar vi en räknarskärm. På den aktiveras ett program.

Program och funktioner matas in på en skärm med detta utseende. Med hjälp av MENU-tangenten hittar man de kommandon och kontrollstrukturer som behövs.

Programmeringsspråket är ”Texas basic”, ett enkelt programmeringsspråk utan finesser. Jag tar mig friheten att kommentera strukturen.

Define storatal()=          programmet namnges
Prgm                                  programstart

Local n,l,r                        variablerna n,l och r definieras som lokala (blir inte kvar efter körningen)

1→n

0→l

0→r                                  variablerna tilldelas startvärden (n-varvräknare, l – antal klave, r – antal krona)

{n}→ant

{0}→forh                       två listor påbörjas, ena för singlingsvarvet, andra för förhållandet mellan kronor och antalet kast

For x,1,100                    en loop på 100 kast påbörjas

augment(ant,{x})→ant        listan med antalen kast utökas kast för kast i loopen

If rand()>0.5 Then      en slumptalsgenerator används. Resultaten varierar mellan 0 och 1. Större än 0,5 – krona. 

1+r→r                            Kontroll:  om krona -antalet r ökar ett steg

Else                                  om klave

1+l→l                             antalet klave ökar ett steg

EndIf                             slut på kontrollen

augment(forh,{approx(((r)/(r+l)))})→forh          forhållandelistan uppdateras

EndFor                          slut på räkneloopen

Disp approx(((r)/(r+l)))    visa förhållandet mellan kronor och totala antalet

EndPrgm                      programslut

Tredje skärmen är en visar statistiken. Relativa antalet kronor från 0 till 100 kast visas.

Skärmen är delad. Nedanför grafen finns en liten räknarsärm. Mata in kommandot storatal() och tryck på ENTER.

Varje tryck på ENTER ger sedan en ny körning med graf.