Hur bestämmer jag enkelt resultatfördelningen för flera tärningar?
On februari 13, 2021 by adminJag vill beräkna sannolikhetsfördelningen för summan av en kombination av tärningar.
Jag kommer ihåg att sannolikheten för är antalet kombinationer som summerar det antalet över det totala antalet kombinationer (förutsatt att tärningarna har en jämn fördelning).
Vilka är formlerna för
- Antalet kombinationer totalt
- Antalet kombinationer som totalt ger ett visst antal
Kommentarer
- Jag tycker att du ska behandla $ (X_1 = 1, X_2 = 2) $ och $ (X_1 = 2, X_2 = 1) $ som olika händelser.
Svar
Exakta lösningar
Antalet kombinationer i $ n $ kast är naturligtvis $ 6 ^ n $ .
Dessa beräkningar görs lättast med hjälp av den sannolikhetsgenererande funktionen för en form,
$$ p (x) = x + x ^ 2 + x ^ 3 + x ^ 4 + x ^ 5 + x ^ 6 = x \ frac {1-x ^ 6} {1-x}. $$
(Egentligen är detta $ 6 $ gånger pgf – jag tar hand om faktorn $ 6 $ i slutet.)
Pgf för $ n $ rullar är $ p (x) ^ n $ . Vi kan beräkna detta ganska direkt – det är inte en sluten form men det är användbart – med Binomialteorem:
$$ p (x ) ^ n = x ^ n (1 – x ^ 6) ^ n (1 – x) ^ {- n} $$
$ $ = x ^ n \ vänster (\ sum_ {k = 0} ^ {n} {n \ välj k} (-1) ^ kx ^ {6k} \ höger) \ vänster (\ sum_ {j = 0} ^ { \ infty} {-n \ välj j} (-1) ^ jx ^ j \ höger). $$
Antalet sätt att få en summa lika med $ m $ på tärningen är koefficienten för $ x ^ m $ i denna produkt, som vi kan isolera som
$$ \ sum_ {6k + j = m – n} {n \ välj k} {- n \ välj j} (- 1) ^ {k + j} . $$
Summan är över alla icke-negativa $ k $ och $ j $ för vilka $ 6k + j = m – n $ ; det är därför ändligt och har endast $ (m-n) / 6 $ termer. Till exempel är antalet sätt att totalt $ m = 14 $ i $ n = 3 $ kastar en summa av bara två termer, eftersom $ 11 = 14-3 $ endast kan skrivas som $ 6 \ cdot 0 + 11 $ och $ 6 \ cdot 1 + 5 $ :
$$ – {3 \ välj 0} {-3 \ välj 11} + {3 \ välj 1} {- 3 \ välj 5} $$
$$ = 1 \ frac {(- 3) (- 4) \ cdots (-13)} {11!} + 3 \ frac {(- 3) (- 4) \ cdots (-7)} {5!} $$
$$ = \ frac {1} {2} 12 \ cdot 13 – \ frac {3} {2} 6 \ cdot 7 = 15 . $$
(Du kan också vara smart och notera att svaret är detsamma för $ m = 7 $ av symmetrin 1 < -> 6, 2 < -> 5 och 3 < -> 4 och det finns bara ett sätt att expandera $ 7 – 3 $ som $ 6 k + j $ ; nämligen med $ k = 0 $ och $ j = 4 $ , vilket ger
$$ {3 \ välj 0} {- 3 \ välj 4} = 15 \ text {.} $$
Sannolikheten är därför lika med $ 15/6 ^ 3 $ = $ 5/36 $ , cirka 14%.
När detta blir smärtsamt ger Central Limit Theorem bra approximationer (åtminstone till de centrala termerna där $ m $ ligger mellan $ \ frac {7 n} {2} – 3 \ sqrt {n} $ och $ \ frac {7 n} {2} + 3 \ sqrt { n} $ : på relativ basis blir de ungefärliga approximationerna för svansvärdena värre och värre när $ n $ blir stort).
Jag ser att denna formel ges i Wikipedia-artikeln Srikantreferenser men ingen motivering ges och inga exempel ges. Om detta synsätt ser för abstrakt ut, starta ditt favoritdatoralgebrasystem och be det att utvidga $ n ^ {\ text {th}} $ kraften på $ x + x ^ 2 + \ cdots + x ^ 6 $ : du kan läsa hela uppsättningen värden direkt. T.ex , en Mathematica-enfodral är
With[{n=3}, CoefficientList[Expand[(x + x^2 + x^3 + x^4 + x^5 + x^6)^n], x]]
Kommentarer
- Fungerar den matematikakoden med wolfram alpha?
- Det fungerar. Jag försökte din tidigare version men kunde inte ge någon mening med utdata.
- @Srikant: Expand [Sum [x ^ i, {i, 1,6}] ^ 3] fungerar också i WolframAlpha
- @ A.Wilson Jag tror att många av dessa referenser ge en tydlig väg till generaliseringen, som i detta exempel är $ (x + x ^ 2 + \ cdots + x ^ 6) (x + x ^ 2 + x ^ 3 + x ^ 4) ^ 3 $. Om du vill att
R
-kod ska beräkna dessa saker, se stats.stackexchange.com/a/116913 för en fullt implementerat system. Som ett annat exempel är Mathematica -kodenClear[x, d]; d[n_, x_] := Sum[x^i, {i, 1, n}]; d[6, x] d[4, x]^3 // Expand
- Observera att @whuber ’ s förtydligande är för 1d6 + 3d4, och det borde få dig dit. För en godtycklig wdn + vdm, (x + x ^ 2 + … + x ^ w) ^ n (x + x ^ 2 + … + x ^ v) ^ m. Ytterligare termer är polynomer konstruerade och multiplicerade med produkten på samma sätt.
Svar
Ännu ett sätt att snabbt beräkna sannolikhetsfördelningen av en tärning skulle vara att använda en specialkalkylator som är utformad just för det ändamålet.
Torben Mogensen , en CS professor vid DIKU har en utmärkt tärningsrulle som heter Troll .
Troll-tärningsvalsen och sannolikhetsräknaren skriver ut sannolikhetsfördelningen (pmf, histogram och eventuellt cdf eller ccdf), medelvärde, spridning och medelavvikelse för en mängd komplicerade tärningsvalsmekanismer. Här är några exempel som visar Trolls tärningsspråk:
Rulla 3 6-sidigt tärningar och summera dem: sum 3d6
.
Kasta 4 6-sidiga tärningar, behåll de högsta 3 och summera dem: sum largest 3 4d6
.
Rulla en ”exploderande” 6-sidig form (dvs. när en ”6” kommer upp, lägg till 6 till din totala och rulla igen): sum (accumulate y:=d6 while y=6)
.
Troll ”s SML källkod är tillgänglig om du vill se hur den implementeras.
Professor Morgensen har också en 29-sidigt papper, ” Dice Rolling Mechanisms in RPGs ,” där han diskuterar många av de tärningsvalsmekanismer som implementerats av Troll och en del av matematiken bakom dem.
En liknande del gratis programvara med öppen källkod är Dicelab , som fungerar på både Linux och Windows.
Svar
Det finns ett mycket snyggt sätt att beräkna kombinationer eller sannolikhet ities i ett kalkylblad (som excel) som beräknar krökarna direkt.
Jag gör det i termer av sannolikheter och illustrerar det för sexsidiga tärningar men du kan göra det för tärningar med valfritt antal sidor (inklusive att lägga till olika).
( btw det är också lätt i något som R eller matlab som kommer att göra krångel)
Börja med ett rent ark, i några kolumner, och flytta ner en massa rader från toppen (mer än 6) .
-
placera värdet 1 i en cell. Det är sannolikheterna som är associerade med 0 tärningar. Placera en 0 till vänster; det är värdekolumnen – fortsätt ner därifrån med 1,2,3 ner så långt du behöver.
-
flytta en kolumn till höger och ned en rad från ”1”. ange formeln ”= summa (” sedan vänsterpil uppåtpil (för att markera cellen med 1 i den), tryck ”:” (för att börja skriva in ett intervall) och sedan uppåtpil 5 gånger, följt av ”) / 6 ”och tryck på Enter – så får du en formel som
=sum(c4:c9)/6
(där härC9
är cellen med 1 i den) .Kopiera sedan formeln och klistra in den i de 5 cellerna under den. De borde innehålla 0,166667 (ish).
Skriv inte något i de tomma cellerna med dessa formler hänvisa till!
-
flytta ner 1 och till höger 1 från toppen av den kolumnen med värden och klistra in …
… totalt ytterligare 11 värden. Dessa kommer att vara sannolikheten för två tärningar.
Det spelar ingen roll om du klistrar in några för många, du får bara nollor.
-
upprepa steg 3 för nästa kolumn för tre tärningar och igen för fyra, fem osv. tärningar.
Vi ser här att sannolikheten för att rulla $ 12 $ på 4d6 är 0,096451 (om du multiplicerar med $ 4 ^ 6 $ kommer du att kunna skriva det som en exakt bråkdel.
Om du är skicklig med Excel – saker som att kopiera en formel från en cell och klistra in i många celler i en kolumn kan du generera alla tabeller upp till säga 10d6 på ungefär en minut (möjligen snabbare om du har gjort det några gånger).
Om du vill ha kombinationsräkningar istället för sannolikheter, dela inte med 6.
Om du vill ha tärningar med olika antal ansikten kan du summera $ k $ (snarare än 6) celler och sedan dela med $ k $. Du kan blanda tärningar över kolumner (t.ex.gör en kolumn för d6 och en för d8 för att få sannolikhetsfunktionen för d6 + d8):
Kommentarer
- Det här är mycket användbart för någon som jag som bara vill ha ett sätt att göra det utan att behöva förstå! Om du inte ’ tänker på volatiliteten i
OFFSET()
-funktionen kan du göra denna dynamik med ett namngivet intervall. För till exempel skapade jag ett intervall som heterDiceSize
för att hålla antalet sidor och placera den första ” 1 ” sannolikhet i B23. Jag använde ett dynamiskt namn som heter KingSum som refererar till=OFFSET('Dice Rolls'!$A$22,-1*DiceSize,,DiceSize,1)
. Jag kunde sedan använda formeln=SUM(OFFSET(KingSum,ROW(A1),COLUMN(A1)))/DiceSize
i Cell C23, dra över ett stort område för att ge en tabell som är beroende av DiceSize.
Svar
$ \ newcommand {red} {\ color {red}} $ $ \ newcommand {blue} {\ color {blue}} $
Låt den första döden vara röd och den andra vara svart. Sedan finns det 36 möjliga resultat:
\ begin {array} {c | c | c | c | c | c | c} & 1 & 2 & 3 & 4 & 5 & 6 \\\ hline \ red {1} & \ red {1}, 1 & \ red {1}, 2 & \ red {1}, 3 & \ red {1}, 4 & \ red {1}, 5 & \ red {1}, 6 \\ & \ blå {^ 2} & \ blue {^ 3} & \ blue {^ 4} & \ blue {^ 5} & \ blue {^ 6} & \ blue {^ 7} \\\ hline \ röd {2} & \ röd {2}, 1 & \ röd {2}, 2 & \ red {2}, 3 & \ red {2}, 4 & \ red {2}, 5 & \ red {2}, 6 \\ & \ blue {^ 3} & \ blå {^ 4}
\ blue {^ 5} & \ blue {^ 6} & \ blue { ^ 7} & \ blue {^ 8} \\\ hline \ red {3} & \ red {3}, 1 & \ red {3}, 2 & \ red {3}, 3 & \ röd {3}, 4 & \ röd {3}, 5 & \ röd {3}, 6 \\ & \ blue {^ 4} & \ blue {^ 5} & \ blue {^ 6} & \ blue {^ 7} & \ blue {^ 8} & \ blue {^ 9} \\\ hline \ red {4} & \ red {4}, 1 & \ red {4}, 2 & \ red {4}, 3 & \ red {4}, 4 & \ röd {4}, 5 & \ röd {4}, 6 \\ & \ blå {^ 5} & \ blue {^ 6} & \ blue {^ 7} & \ blue {^ 8 } & \ blå {^ 9} & \ blå {^ {10}} \\\ hline \ röd {5} & \ röd {5 }, 1 & \ red {5}, 2 & \ red {5}, 3 & \ red {5}, 4 & \ red {5}, 5 & \ red {5}, 6 \\ & \ blue {^ 6} & \ blue {^ 7} & \ blue {^ 8} & \ blue {^ 9} & \ blue {^ {10}} & \ blå {^ {11}} \\\ hline \ röd {6} & \ röd {6}, 1 & \ red {6}, 2 & \ red {6}, 3 & \ red {6}, 4 & \ red {6}, 5 & \ red {6}, 6 \\ & \ blå {^ 7} & \ blue {^ 8} & \ blue {^ 9} & \ blue {^ {10}} & \ blue {^ {11}} & \ blue {^ {12} } \\\ hline \ end {array}
Var och en av dessa 36 ($ \ red {\ text {red}}, \ text {black} $) resultat är lika troliga.
När du summerar siffrorna i ansiktena (totalt i $ \ blue {\ text {blue}} $), flera av (röda, svarta) resultat hamnar på samma summa – du kan se detta med tabellen i din fråga.
Så till exempel finns det bara en sätt att få totalt $ 2 $ (dvs. endast händelsen ($ \ red {1}, 1 $)), men det finns två sätt att få $ 3 $ (dvs. de elementära händelserna ($ \ red {2}, 1 $) och ($ \ red {1}, 2 $)). Så totalt $ 3 $ är dubbelt så sannolikt att de kommer upp som $ 2 $. På samma sätt finns det tre sätt att få $ 4 $, fyra sätt att få $ 5 $ och så vidare .
Nu eftersom du har 36 möjliga (röda, svarta) resultat, är det totala antalet sätt att få alla olika summor också 36, så du bör dela med 36 i slutet. Din totala sannolikhet kommer att vara 1, som den borde vara.
Kommentarer
- Wow, tabellen är vacker!
- Mycket vackert
Svar
Ungefärlig lösning
Jag förklarade den exakta lösningen tidigare (se nedan). Jag kommer nu att erbjuda en ungefärlig lösning som kan passa dina behov bättre.
Låt:
$ X_i $ är resultatet av en kastning av en $ s $ tärning där $ i = 1, … n $.
$ S $ är summan av alla $ n $ tärningar.
$ \ bar {X} $ är exempelgenomsnittet.
Per definition har vi:
$ \ bar {X} = \ frac {\ sum_iX_i} {n} $
Med andra ord,
$ \ bar {X} = \ frac {S} {n} $
Tanken är nu att visualisera processen att observera $ {X_i} $ som resultatet av att kasta samma tärning $ n $ gånger istället för som resultatet av att kasta $ n $ tärningar. Således kan vi åberopa den centrala gränssatsen (ignorera tekniska aspekter för att gå från diskret distribution till kontinuerlig), vi har som $ n \ rightarrow \ infty $:
$ \ bar {X} \ sim N ( \ mu, \ sigma ^ 2 / n) $
där,
$ \ mu = (s + 1) / 2 $ är medelvärdet av kastet av en enstaka tärning och
$ \ sigma ^ 2 = (s ^ 2-1) / 12 $ är den associerade variansen.
Ovanstående är uppenbarligen en approximation eftersom den underliggande fördelningen $ X_i $ har diskret Stöd.
Men
$ S = n \ bar {X} $.
Således har vi:
$ S \ sim N (n \ mu, n \ sigma ^ 2) $.
Exakt lösning
Wikipedia har en kort förklaring till hur man beräknar de nödvändiga sannolikheterna. Jag kommer att utarbeta lite mer om varför förklaringen där är meningsfull. I den mån det är möjligt har jag använt liknande beteckningar som Wikipedia-artikeln.
Antag att du har $ n $ tärningar vardera med $ s $ ansikten och att du vill beräkna sannolikheten för att en enda kast av alla $ n $ tärnar totalen totalt upp till $ k $. Tillvägagångssättet är som följer:
Definiera:
$ F_ {s, n} (k) $: Sannolikheten att du får totalt $ k $ på en enda rulle på $ n $ tärningar med $ s $ ansikten.
Per definition har vi:
$ F_ {s, 1} (k) = \ frac {1} {s} $
Ovanstående anger att om du bara har en tärning med $ s $ står sannolikheten för att få totalt $ k $ mellan 1 och s den välbekanta $ \ frac {1} {s} $.
Tänk på situationen när du kastar två tärningar: Du kan få en summa på $ k $ enligt följande: Den första kasten är mellan 1 och $ k-1 $ och motsvarande kast för den andra är mellan $ k -1 $ till $ 1 $. Således har vi:
$ F_ {s, 2} (k) = \ sum_ {i = 1} ^ {i = k-1} {F_ {s, 1} (i) F_ { s, 1} (ki)} $
Tänk nu på en tärningskast: Du kan få en summa på $ k $ om du kastar en 1 till $ k-2 $ på den första tärningen och summan på de återstående två tärningarna är mellan $ k-1 $ och $ 2 $. Således
$ F_ {s, 3} (k) = \ sum_ {i = 1} ^ {i = k-2} {F_ {s, 1} (i) F_ {s, 2 } (ki)} $
Fortsättning av logiken ovan får rekursionsekvationen:
$ F_ {s, n} (k) = \ sum_ {i = 1} ^ {i = k-n + 1} {F_ {s, 1} (i) F_ {s, n-1} (ki)} $
Se Wikipedia-länken för mer information.
Kommentarer
- @Srikant Utmärkt svar, men löser den funktionen till något aritmetik (dvs: inte rekursivt)?
- @C. Ross Tyvärr tror jag inte det. Men jag misstänker att rekursion inte borde vara så svår så länge som det handlar om ganska små n och små s. Du kan bara bygga upp en uppslagstabell och använda den upprepade gånger efter behov.
- Wikipedia-sidan du länkade har en enkel icke-rekursiv formel som är en enda summa. En härledning finns i whuber ’ s svar.
- Wiki-länkankaren är död, känner du till en ersättare?
Svar
Detta är faktiskt en förvånansvärt komplicerad fråga. Lyckligtvis för dig finns det en exakt lösning som förklaras mycket väl här:
http://mathworld.wolfram.com/Dice.html
Sannolikheten du letar efter ges av ekvation (10): ”Sannolikheten för att få p-poäng (en kast av p) på n-sidiga tärningar”.
I ditt fall: p = den observerade poängen (summan av alla tärningar), n = antalet tärningar, s = 6 (6-sidig tärning). Detta ger dig följande sannolikhetsmassfunktion:
$$ P (X_n = p) = \ frac {1} {s ^ n} \ sum_ {k = 0} ^ {\ lfloor (pn) / 6 \ rfloor} (-1) ^ k {n \ välj k} {p-6k-1 \ välj n-1} $$
Kommentarer
- Välkommen till vår webbplats, Felix!
Svar
Karaktäristiska funktioner kan göra beräkningar med summor och skillnader för slumpmässiga variabler riktigt enkla. Mathematica har många funktioner att arbeta med statistiska fördelningar, inklusive ett inbyggt för att omvandla en distribution till dess karakteristiska funktion.
Jag skulle vilja för att illustrera detta med två konkreta exempel: (1) Antag att du ville bestämma resultaten av att kasta en tärningssamling med olika antal sidor, t.ex. rulla två sexsidiga tärningar plus en åtta sidor dö (dvs. 2d6 + d8 )?Eller (2) antar att du ville hitta skillnaden mellan två tärningsrullar (t.ex. d6-d6 )?
Ett enkelt sätt att göra detta skulle vara att använda de karakteristiska funktionerna av de underliggande diskreta enhetliga fördelningarna. Om en slumpmässig variabel $ X $ har en sannolikhetsmassfunktion $ f $, är dess karakteristiska funktion $ \ varphi_X (t) $ bara den diskreta Fourier Transform av $ f $, dvs $ \ varphi_X (t) = \ mathcal {F} \ {f \} (t) = E [e ^ {it X }] $. En sats berättar:
Om de oberoende slumpmässiga variablerna $ X $ och $ Y $ har motsvarande sannolikhetsmassfunktioner $ f $ och $ g $, så är pmf $ h $ av summan $ X + Y $ för dessa husbilar är konvolution av deras pmfs $ h (n) = (f \ ast g) (n) = \ sum_ {m = – \ infty} ^ \ infty f (m) g (nm) $.
Vi kan använda fällningsegenskapen i Fourier Transforms för att omformulera detta enklare när det gäller karakteristiska funktioner:
Den karakteristiska funktionen $ \ varphi_ {X + Y} (t) $ av summan av oberoende slumpmässiga variabler $ X $ och $ Y $ motsvarar produkten av deras karakteristiska funktioner $ \ varphi_ {X} (t) \ varphi_ {Y} (t) $.
Denna Mathematica-funktion kommer att göra den karakteristiska funktionen för en ensidig form:
MakeCf[s_] := Module[{Cf}, Cf := CharacteristicFunction[DiscreteUniformDistribution[{1, s}], t]; Cf]
PMf för en distribution kan återvinnas från dess karakteristiska funktion, eftersom Fourier-transformer är inverterbara. Här är Mathematica-koden för att göra det:
RecoverPmf[Cf_] := Module[{F}, F[y_] := SeriesCoefficient[Cf /. t -> -I*Log[x], {x, 0, y}]; F]
Fortsätt vårt exempel, låt F vara den pmf som kommer från 2d6 + d8.
F := RecoverPmf[MakeCf[6]^2 MakeCf[8]]
Det finns $ 6 ^ 2 \ cdot 8 = 288 $ resultat. Stöddomänen för F är $ S = \ {3, \ ldots, 20 \} $. Tre är min eftersom du kastar tre tärningar. Och tjugo är max eftersom $ 20 = 2 \ cdot 6 + 8 $. Om du vill se bilden av F, beräkna
In:= F /@ Range[3, 20] Out= {1/288, 1/96, 1/48, 5/144, 5/96, 7/96, 13/144, 5/48, 1/9, 1/9, \ 5/48, 13/144, 7/96, 5/96, 5/144, 1/48, 1/96, 1/288}
Om du vill veta antalet resultat som uppgår till 10, beräkna
In:= 6^2 8 F[10] Out= 30
Om de oberoende slumpmässiga variablerna $ X $ och $ Y $ har motsvarande sannolikhetsmassfunktioner $ f $ och $ g $, då är pmf $ h $ av skillnaden $ X – Y $ för dessa husbilar korskorrelation av deras pmfs $ h (n) = (f \ star g) (n) = \ sum_ {m = – \ infty} ^ \ infty f (m) g (n + m) $ .
Vi kan använda tvärkorrelationsegenskapen hos Fourier Transforms för att omformulera detta enklare när det gäller karakteristiska funktioner:
Den karakteristiska funktionen $ \ varphi_ {XY} (t) $ av skillnaden mellan två oberoende slumpmässiga variabler $ {X, Y} $ är lika med produkten för den karakteristiska funktionen $ \ varphi_ {X} (t) $ och $ \ varphi_ {Y} (- t) $ (Observera det negativa tecknet framför variabeln t i andra ka rakteristisk funktion).
Så, med Mathematica för att hitta pmf G för d6-d6:
G := RecoverPmf[MakeCf[6] (MakeCf[6] /. t -> -t)]
Det finns $ 6 ^ 2 = 36 $ resultat. Stöddomänen för G är $ S = \ {- 5, \ ldots, 5 \} $. -5 är min eftersom $ -5 = 1-6 $. Och 5 är max eftersom $ 6-1 = 5 $. Om du vill se bilden av G beräknar du
In:= G /@ Range[-5, 5] Out= {1/36, 1/18, 1/12, 1/9, 5/36, 1/6, 5/36, 1/9, 1/12, 1/18, 1/36}
Kommentarer
- Naturligtvis för diskreta distributioner, inklusive fördelningar av ändligt stöd (som de som det är fråga om här), är cf bara den sannolikhetsgenererande funktionen utvärderad vid x = exp (it), vilket gör det till ett mer komplicerat sätt att koda samma information.
- @ whuber: Som du säger är cf, mgf och pgf mer eller mindre samma och lätt omvandlingsbara till varandra, men Mathematica har en cf-inbyggd funktion som fungerar med alla sannolikhetsfördelningar den känner till, medan den har ’ inget pgf-inbyggt. Detta gör Mathematica-koden för att arbeta med summor (och skillnader) med tärningar med cfs särskilt eleganta att konstruera, oavsett komplexiteten i tärningsuttryck som jag hoppas att jag visade ovan. Dessutom skadar det inte ’ att veta hur cfs, FT, viklingar och korskorrelationer kan hjälpa till att lösa sådana problem.
- @Elisha: Bra poäng , allihopa. Jag antar att det jag undrar mest om huruvida dina tio eller så rader av Mathematica-koden verkligen är mer ” eleganta ” eller effektiva än en rad jag föreslog tidigare (eller den ännu kortare linjen Srikant matades till Wolfram Alpha). Jag misstänker att de interna manipulationerna med karakteristiska funktioner är svårare än de enkla krånglarna som behövs för att multiplicera polynom. Visst är det senare lättare att implementera i de flesta andra programvarumiljöer, som Glen_b ’ svaret indikerar. Fördelen med ditt tillvägagångssätt är dess större allmänhet.
Svar
Här är ett annat sätt att beräkna sannolikheten fördelning av summan av två tärningar för hand med viklingar.
För att hålla exemplet riktigt enkelt beräknar vi sannolikhetsfördelningen för summan av en tresidig matris (d3) vars slumpmässiga variabel vi kommer att kalla X och en dubbelsidig matris (d2 ) vars slumpmässiga variabel vi ”kallar Y.
Du ska skapa en tabell. Skriv över sannolikhetsfördelningen för X över den översta raden (resultatet av att rulla en rättvis d3). Nedåt till vänster , skriv sannolikhetsfördelningen för Y (resultat av att rulla en rättvis d2).
Du kommer att konstruera ytterprodukten av översta raden av sannolikheter med den vänstra kolumnen med sannolikheter. Till exempel kommer den nedre högra cellen att vara produkten av Pr [X = 3] = 1/3 gånger Pr [Y = 2] = 1/2 som visas i den bifogade figuren. I vårt förenklade exempel är alla celler lika med 1/6.
Därefter kommer du att summera längs de sneda linjerna i ytterproduktmatrisen som visas i medföljande diagram. Varje sned linje passerar genom en eller flera celler som jag har färgat samma: Den översta raden passerar genom en blå cell, nästa rad passerar genom två röda celler och så vidare.
Var och en av summorna längs snedställningarna representerar en sannolikhet i den resulterande fördelningen. Till exempel är summan av de röda blodkropparna lika med sannolikheten för att de två tärningarna summeras till 3. Dessa sannolikheter visas längst till höger i det bifogade diagrammet. med ändligt stöd. Och du kan tillämpa det iterat. Om du till exempel vill veta fördelningen av tre sexsidiga tärningar (3d6) kan du först beräkna 2d6 = d6 + d6; sedan 3d6 = d6 + 2d6.
Det finns ett gratis (men stängt licens) programmeringsspråk som heter J . Det är ett arraybaserat språk med sina rötter i APL. Den har inbyggda operatörer för att utföra yttre produkter och summor längs snedställningarna i matriser, vilket gör den teknik som jag illustrerade ganska enkel att implementera.
I följande J-kod definierar jag två verb. Först konstruerar verbet d
en matris som representerar pmf för en s-sidig matris. Till exempel är d 6
pmf för en 6-sidig matris. För det andra hittar verbet conv
den yttre produkten av två matriser och summor längs de sneda linjerna. Så conv~ d 6
skriver ut pmf för 2d6:
d=:$% conv=:+//.@(*/) |:(2+i.11),:conv~d 6 2 0.0277778 3 0.0555556 4 0.0833333 5 0.111111 6 0.138889 7 0.166667 8 0.138889 9 0.111111 10 0.0833333 11 0.0555556 12 0.0277778
Som du kan se är J kryptisk men kort .
Svar
Älskar användarnamnet! Bra gjort 🙂
Resultaten du borde räkna är tärningskastarna, alla $ 6 \ gånger 6 = 36 $ av dem som visas i din tabell.
Till exempel $ \ frac {1} {36} $ av tiden summan är $ 2 $ och $ \ frac {2} {36} $ av tiden summan är $ 3 $ och $ \ frac {4} {36} $ av tiden summan är $ 4 $ och så vidare.
Kommentarer
- Jag ’ är verkligen förvirrad av detta. Jag svarade på en mycket nybörjarefråga från någon som heter die_hard, som uppenbarligen inte längre finns, och hittade sedan mitt svar bifogat den här gamla tråden!
- Ditt svar på frågan på stats.stackexchange.com/questions/173434/… slogs samman med svaren på denna duplikat.
Svar
Du kan lösa detta med en rekursiv formel. I så fall beräknas sannolikheten för rullarna med $ n $ tärningar av rullarna med $ n-1 $ tärningar.
$$ a_n (l) = \ sum_ {l-6 \ leq k \ leq l-1 \\ \ text {och} n-1 \ leq k \ leq 6 (n-1)} a_ {n-1} (k) $$
Den första gränsen för k in summeringen är de sex föregående siffrorna. Om du t.ex. vill kasta 13 med 3 tärningar kan du göra detta om dina första två tärningar kastar mellan 7 och 12.
Den andra gränsen för k i summeringen är gränserna för vad du kan kasta med n-1 tärningar
Resultatet:
1 1 1 1 1 1 1 2 3 4 5 6 5 4 3 2 1 1 3 6 10 15 21 25 27 27 25 21 15 10 6 3 1 1 4 10 20 35 56 80 104 125 140 146 140 125 104 80 56 35 20 10 4 1 1 5 15 35 70 126 205 305 420 540 651 735 780 780 735 651 540 420 305 205 126 70 35 15 5 1
redigera: Svaret ovan var ett svar från en annan fråga som slogs samman i frågan av C.Ross
Koden nedan visar hur beräkningarna för det svaret (på frågan om 5 tärningar) utfördes i R. De liknar summeringarna som utfördes i Excel i svaret av Glen B.
# recursive formula nextdice <- function(n,a,l) { x = 0 for (i in 1:6) { if ((l-i >= n-1) & (l-i<=6*(n-1))) { x = x+a[l-i-(n-2)] } } return(x) } # generating combinations for rolling with up to 5 dices a_1 <- rep(1,6) a_2 <- sapply(2:12,FUN = function(x) {nextdice(2,a_1,x)}) a_3 <- sapply(3:18,FUN = function(x) {nextdice(3,a_2,x)}) a_4 <- sapply(4:24,FUN = function(x) {nextdice(4,a_3,x)}) a_5 <- sapply(5:30,FUN = function(x) {nextdice(5,a_4,x)})
Kommentarer
- @ user67275 din fråga slogs samman i den här frågan. Men jag undrar vad din idé låg bakom din formel: ” Jag använde formeln: inga sätt att få 8: 5_H_2 = 6_C_2 = 15 ” ?
Svar
En metod är att säga att sannolikheten $ X_n = k $ är koefficienten $ x ^ {k} $ i expansionen av genereringsfunktionen $$ \ left (\ frac {x ^ 6 + x ^ 5 + x ^ 4 + x ^ 3 + x ^ 2 + x ^ 1} {6} \ right) ^ n = \ left (\ frac {x (1-x ^ 6)} {6 (1-x)} \ right) ^ n $$
Så till exempel med sex tärningar och ett mål på $ k = 22 $ hittar du $ P (X_6 = 22) = \ frac {10} {6 ^ 6} $. Den länken (till en math.stackexchange-fråga) ger också andra tillvägagångssätt
Lämna ett svar