Jak snadno určit rozdělení výsledků pro více kostek?
On 13 února, 2021 by adminChci vypočítat rozdělení pravděpodobnosti pro součet kombinací kostek.
Pamatuji si, že pravděpodobnost je počet kombinací, které celkový počet přesahují celkový počet kombinací (za předpokladu, že kostky mají rovnoměrné rozdělení).
Jaké jsou vzorce pro
- Celkový počet kombinací
- Počet kombinací, které dosáhnou určitého počtu
Komentáře
- Myslím, že s $ (X_1 = 1, X_2 = 2) $ a $ (X_1 = 2, X_2 = 1) $ byste měli zacházet odlišně události.
Odpověď
Přesná řešení
Počet kombinací v hodech $ n $ je samozřejmě $ 6 ^ n $ .
Tyto výpočty se nejsnadněji provádějí pomocí funkce generování pravděpodobnosti pro jednu kostku,
$$ p (x) = x + x ^ 2 + x ^ 3 + x ^ 4 + x ^ 5 + x ^ 6 = x \ frac {1-x ^ 6} {1-x}. $$
(Ve skutečnosti je to $ 6 $ krát pgf – postarám se o faktor 6 $ $ na konci.)
Pgf pro role $ n $ je $ p (x) ^ n $ . Můžeme to vypočítat docela přímo – není to uzavřená forma, ale je to užitečné – pomocí Binomické věty:
$$ p (x ) ^ n = x ^ n (1 – x ^ 6) ^ n (1 – x) ^ {- n} $$
$ $ = x ^ n \ left (\ sum_ {k = 0} ^ {n} {n \ select k} (-1) ^ kx ^ {6k} \ right) \ left (\ sum_ {j = 0} ^ { \ infty} {-n \ choose j} (-1) ^ jx ^ j \ right). $$
Počet způsobů, jak získat součet rovný $ m $ na kostkách je koeficient $ x ^ m $ v tomto produktu, který můžeme izolovat jako
$$ \ sum_ {6k + j = m – n} {n \ select k} {- n \ select j} (- 1) ^ {k + j} . $$
Součet přesahuje všechny nezáporné $ k $ a $ j $ pro které $ 6k + j = m – n $ ; je tedy konečný a má pouze přibližně $ (m-n) / 6 $ výrazů. Například počet způsobů, jak celkem $ m = 14 $ v $ n = 3 $ hodech, je součet jen dvou výrazů, protože $ 11 = 14-3 $ lze zapsat pouze jako $ 6 \ cdot 0 + 11 $ a $ 6 \ cdot 1 + 5 $ :
$$ – {3 \ zvolte 0} {-3 \ zvolte 11} + {3 \ vyberte 1} {- 3 \ vyberte 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 . $$
(Můžete být také chytří a všimněte si, že odpověď bude stejná pro $ m = 7 $ od symetrie 1 < -> 6, 2 < -> 5 a 3 < -> 4 a existuje pouze jeden způsob, jak rozšířit $ 7 – 3 $ jako $ 6 k + j $ ; konkrétně s $ k = 0 $ a $ j = 4 $ , což
$$ {3 \ choose 0} {- 3 \ choose 4} = 15 \ text {.} $$
Pravděpodobnost se proto rovná $ 15/6 ^ 3 $ = $ 5/36 $ , přibližně 14%.
Než to začne být bolestivé, poskytuje Centrální limitní věta dobré aproximace (alespoň k centrálním výrazům, kde $ m $ je mezi $ \ frac {7 n} {2} – 3 \ sqrt {n} $ a $ \ frac {7 n} {2} + 3 \ sqrt { n} $ : na relativní bázi se přibližování, které poskytuje pro ocasní hodnoty, zhoršuje a zhoršuje, jak $ n $ roste)).
Vidím, že tento vzorec je uveden v článku Wikipedie Odkazy, ale není poskytnuto žádné odůvodnění ani příklady. Pokud tento přístup vypadá příliš abstraktně, zapněte svůj oblíbený počítačový algebraický systém a požádejte ho, aby rozšířil $ n ^ {\ text {th}} $ sílu $ x + x ^ 2 + \ cdots + x ^ 6 $ : celou sadu hodnot si můžete přečíst hned. Např. je jednorázová linka Mathematica
With[{n=3}, CoefficientList[Expand[(x + x^2 + x^3 + x^4 + x^5 + x^6)^n], x]]
Komentáře
- Bude tento matematický kód fungovat s wolframem alfa?
- To funguje. Zkoušel jsem vaši dřívější verzi, ale nemohl dávat smysl výstupu.
- @Srikant: Rozbalit [Součet [x ^ i, {i, 1,6}] ^ 3] funguje také ve WolframAlpha
- @ A.Wilson Věřím, že mnoho z těchto odkazů poskytnout jasnou cestu k zevšeobecnění, která je v tomto příkladu $ (x + x ^ 2 + \ cdots + x ^ 6) (x + x ^ 2 + x ^ 3 + x ^ 4) ^ 3 $. Pokud chcete, aby
R
kód tyto věci spočítal, přečtěte si stats.stackexchange.com/a/116913 plně implementovaný systém. Jako další příklad je kód MathematicaClear[x, d]; d[n_, x_] := Sum[x^i, {i, 1, n}]; d[6, x] d[4, x]^3 // Expand
- Všimněte si, že @whuber ‚ Vysvětlení je pro 1d6 + 3d4, a to by vás tam mělo dostat. Pro libovolný wdn + vdm, (x + x ^ 2 + … + x ^ w) ^ n (x + x ^ 2 + … + x ^ v) ^ m. Další pojmy jsou polynomy konstruované a násobené s produktem stejným způsobem.
Odpovědět
Ještě další způsob, jak rychle spočítat rozdělení pravděpodobnosti hodu kostkou by bylo použití specializované kalkulačky určené právě pro tento účel.
Torben Mogensen , CS profesor na DIKU má vynikající kostkový váleček s názvem Troll .
Trollový kostkový válec a kalkulačka pravděpodobnosti vytiskne rozdělení pravděpodobnosti (pmf, histogram a volitelně cdf nebo ccdf), průměr, šíření a střední odchylku pro řadu složitých mechanismů hodu kostkami. Zde je několik příkladů, kterými se Trollův jazyk kostek hodí:
Hodte 3 šestistranné kostky a sečtěte je: sum 3d6
.
Hodte 4 6strannými kostkami, ponechte nejvyšší 3 a sečtěte je: sum largest 3 4d6
.
Hodte „explodující“ šestistrannou kostku (tj. jakoukoli jakmile se objeví „6“, přidejte 6 k celkovému součtu a hodte znovu): sum (accumulate y:=d6 while y=6)
.
Troll „s SML zdrojový kód je k dispozici, pokud chcete vidět, jak je implementován.
Profesor Morgensen má také 29stránkový dokument „ Mechaniky házení kostkami v RPG ,“ ve kterém pojednává o mnoha mechanismech házení kostkami implementovaných Trollem a některé matematice za nimi.
Podobným dílem bezplatného softwaru s otevřeným zdrojovým kódem je Dicelab , který funguje v systémech Linux i Windows.
Odpověď
Existuje velmi elegantní způsob výpočtu kombinací nebo pravděpodobnosti ities v tabulce (například Excel), která počítá konvoluce přímo.
Udělám to z hlediska pravděpodobnosti a ilustruji to pro šestistranné kostky, ale můžete to udělat pro kostky s libovolným počtem stran (včetně přidání různých stran).
( btw je to také snadné v něčem jako R nebo matlab, které bude dělat spletitosti)
Začněte s čistým listem, v několika sloupcích a posuňte dolů řadu řádků shora (více než 6) .
-
vložte hodnotu 1 do buňky. To jsou pravděpodobnosti spojené s 0 kostkami. Dejte 0 nalevo; to je sloupec hodnoty – pokračujte odtud dolů s 1,2,3 dolů, pokud potřebujete.
-
přesunout jeden sloupec doprava a dolů o řádek od „1“. zadejte vzorec „= součet (“ pak šipka doleva šipka nahoru (pro zvýraznění buňky s 1 v ní), stiskněte „:“ (pro začátek zadávání rozsahu) a poté šipka nahoru 5krát, následovaná „) / 6 „a stiskněte Enter – takže skončíte se vzorcem jako
=sum(c4:c9)/6
(kde zdeC9
je buňka s 1 v něm) .Potom zkopírujte vzorec a vložte jej do 5 buněk pod ním. Každý z nich by měl obsahovat 0,16667 (ish).
Do prázdných buněk, které tyto vzorce obsahují, nic nezadávejte. viz!
-
posunout dolů o 1 a doprava 1 z horní části tohoto sloupce hodnot a vložit …
… celkem dalších 11 hodnot. Toto bude pravděpodobnost dvou kostek.
Nezáleží na tom, jestli jich vložíte příliš mnoho, dostanete pouze nuly.
-
opakujte krok 3 pro další sloupec pro tři kostky a znovu pro čtyři, pět atd. kostky.
Vidíme zde, že pravděpodobnost převodu $ 12 $ na 4d6 je 0,096451 (pokud vynásobíte $ 4 ^ 6 $, budete jej moci napsat jako přesný zlomek).
Pokud jste adeptem na Excel – například kopírování vzorce z buňky a vkládání do mnoha buněk ve sloupci můžete vygenerovat všechny tabulky až do 10d6 přibližně za minutu (možná rychleji, pokud jste to udělali několikrát).
Pokud chcete počet kombinací místo pravděpodobnosti, nedělte 6.
Pokud chcete kostky s různým počtem tváří, můžete sečíst buňky $ k $ (spíše než 6) a poté je vydělit $ k $. Můžete míchat kostky napříč sloupci (např.vytvořte sloupec pro d6 a jeden pro d8, abyste získali pravděpodobnostní funkci pro d6 + d8):
Komentáře
- To je velmi užitečné pro někoho, jako jsem já, který chce jen způsob, jak to udělat, aniž by tomu musel rozumět! Pokud vám ‚ nevadí volatilita funkce
OFFSET()
, můžete tuto dynamiku provést pomocí pojmenovaného rozsahu. Např. Jsem vytvořil rozsah s názvemDiceSize
, abych udržel počet stran a dal první “ 1 “ pravděpodobnost v B23. Použil jsem dynamický pojmenovaný rozsah s názvem KingSum, který odkazuje na=OFFSET('Dice Rolls'!$A$22,-1*DiceSize,,DiceSize,1)
. Poté jsem mohl použít vzorec=SUM(OFFSET(KingSum,ROW(A1),COLUMN(A1)))/DiceSize
v buňce C23, přetáhnout celou plochu a dát tak tabulku závislou na DiceSize.
Odpověď
$ \ newcommand {red} {\ color {red}} $ $ \ newcommand {blue} {\ color {blue}} $
Nechť první kostka bude červená a druhá černá. Pak existuje 36 možných výsledků:
\ 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 \\ & \ modrá {^ 2} & \ blue {^ 3} & \ blue {^ 4} & \ blue {^ 5} & \ blue {^ 6} & \ blue {^ 7} \\\ hline \ červená {2} & \ red {2}, 1 & \ red {2}, 2 & \ red {2}, 3 & \ red {2}, 4 & \ red {2}, 5 & \ red {2}, 6 \\ & \ blue {^ 3} & \ blue {^ 4}
\ blue {^ 5} & \ blue {^ 6} & \ blue { ^ 7} & \ blue {^ 8} \\\ hline \ red {3} & \ red {3}, 1 & \ red {3}, 2 & \ red {3}, 3 & \ červená {3}, 4 & \ red {3}, 5 & \ red {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 & \ red {4}, 5 & \ red {4}, 6 \\ & \ blue {^ 5} & \ blue {^ 6} & \ blue {^ 7} & \ blue {^ 8 } & \ modrá {^ 9} & \ blue {^ {10}} \\\ hline \ red {5} & \ red {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}} & \ blue {^ {11}} \\\ hline \ red {6} & \ red {6}, 1 & \ red {6}, 2 & \ red {6}, 3 & \ red {6}, 4 & \ red {6}, 5 & \ red {6}, 6 \\ & \ modrá {^ 7} & \ blue {^ 8} & \ blue {^ 9} & \ blue {^ {10}} & \ blue {^ {11}} & \ blue {^ {12} } \\\ hline \ end {pole}
Každý z těchto 36 ($ \ red {\ text {red}}, \ text {black} $) výsledků je stejně pravděpodobných.
Když sečtete čísla na tvářích (celkem v $ \ blue {\ text {blue}} $), několik (červených, černých) výsledků končí stejným součtem – můžete to vidět u tabulky v otázce.
Takže například existuje pouze jeden způsob, jak získat celkem $ 2 $ (tj pouze událost ($ \ red {1}, 1 $)), ale existují dva způsoby, jak získat $ 3 $ (tj. základní události ($ \ red {2}, 1 $) a ($ \ red {1}, 2 $)). Takže celkem je $ 3 $ dvakrát větší pravděpodobnost, že se objeví jako $ 2 $. Podobně existují tři způsoby, jak získat $ 4 $, čtyři způsoby, jak získat $ 5 $ atd. .
Protože nyní máte 36 možných (červených, černých) výsledků, je celkový počet způsobů, jak získat všechny různé součty, také 36, takže na konci byste měli dělit 36. Vaše celková pravděpodobnost bude 1, jak by měla být.
Komentáře
- Páni, ta tabulka je krásná!
- Opravdu velmi hezké
Odpověď
Přibližné řešení
Přesné řešení jsem vysvětlil dříve (viz níže). Nyní nabídnu přibližné řešení, které bude lépe vyhovovat vašim potřebám.
Nechť:
$ X_i $ je výsledkem hodu kostkou s tváří $ s $, kde $ i = 1, … n $.
$ S $ je součet všech $ n $ kostek.
$ \ bar {X} $ je průměr vzorku.
Podle definice máme:
$ \ bar {X} = \ frac {\ sum_iX_i} {n} $
Jinými slovy,
$ \ bar {X} = \ frac {S} {n} $
Myšlenkou nyní je vizualizovat proces pozorování $ {X_i} $ jako výsledku házení stejnými kostkami $ n $ krát místo jako výsledku házení $ n $ kostkami. Můžeme tedy vyvolat centrální limitní větu (ignorujeme technické aspekty spojené s přechodem od diskrétní distribuce k spojité), máme jako $ n \ rightarrow \ infty $:
$ \ bar {X} \ sim N ( \ mu, \ sigma ^ 2 / n) $
kde,
$ \ mu = (s + 1) / 2 $ je průměr hodu jedné kostky a
$ \ sigma ^ 2 = (s ^ 2-1) / 12 $ je přidružená odchylka.
Výše uvedené je zjevně přibližné, protože základní distribuce $ X_i $ má diskrétní Podpěra, podpora.
Ale
$ S = n \ bar {X} $.
Máme tedy:
$ S \ sim N (n \ mu, n \ sigma ^ 2) $.
Přesné řešení
Wikipedia obsahuje krátké vysvětlení, jak vypočítat požadované pravděpodobnosti. Trochu podrobněji rozvedu, proč má vysvětlení smysl. Pokud je to možné, použil jsem podobný zápis jako v článku na Wikipedii.
Předpokládejme, že máte každý $ n $ kostky s $ s $ tvářemi a chcete vypočítat pravděpodobnost, že jeden hod všech $ n $ kostky celkem sečtou až $ k $. Přístup je následující:
Definujte:
$ F_ {s, n} (k) $: Pravděpodobnost, že získáte celkem $ k $ za jeden hod $ n $ kostky s tvářemi $ s $.
Podle definice máme:
$ F_ {s, 1} (k) = \ frac {1} {s} $
Výše uvedené uvádí, že pokud máte pouze jednu kostku s tvářemi $ s $, pravděpodobnost získání celkových $ k $ mezi 1 a s je známý $ \ frac {1} {s} $.
Zvažte situaci, kdy hodíte dvěma kostkami: Součet $ k $ můžete získat následovně: První hod je mezi 1 až $ k-1 $ a odpovídající hod pro druhý je mezi $ k -1 $ až $ 1 $. Máme tedy:
$ F_ {s, 2} (k) = \ sum_ {i = 1} ^ {i = k-1} {F_ {s, 1} (i) F_ { s, 1} (ki)} $
Nyní zvažte kostku tří kostek: Součet $ k $ můžete získat, pokud hodíte 1 až $ k-2 $ na první kostce a součet na zbývajících dvou kostkách je mezi $ k-1 $ až $ 2 $.
$ F_ {s, 3} (k) = \ sum_ {i = 1} ^ {i = k-2} {F_ {s, 1} (i) F_ {s, 2 } (ki)} $
V pokračování výše uvedené logiky dostaneme rovnici rekurze:
$ F_ {s, n} (k) = \ sum_ {i = 1} ^ {i = k-n + 1} {F_ {s, 1} (i) F_ {s, n-1} (ki)} $
Další podrobnosti najdete na odkazu Wikipedie.
Komentáře
- @Srikant Skvělá odpověď, ale vyřeší tato funkce něco aritmetického (tj. ne rekurzivního)?
- @C. Ross Bohužel si to nemyslím. Mám ale podezření, že rekurze by neměla být tak tvrdá, pokud se jedná o rozumně malé na malé a malé s. Můžete jednoduše vytvořit vyhledávací tabulku a použít ji opakovaně podle potřeby.
- Stránka wikipedia, kterou jste propojili, má jednoduchý nerekurzivní vzorec, který je jedinou sumou. Jedna derivace je v odpovědi ‚ odpovědi
- Kotva odkazu wiki je mrtvá, víte o nějaké náhradě?
Odpověď
Toto je vlastně překvapivě komplikovaná otázka. Naštěstí pro vás existuje přesné řešení, které je zde velmi dobře vysvětleno:
http://mathworld.wolfram.com/Dice.html
Pravděpodobnost, kterou hledáte, je dána rovnicí (10): „Pravděpodobnost získání p bodů (hod p) na n-kostkách“.
Ve vašem případě: p = pozorované skóre (součet všech kostek), n = počet kostek, s = 6 (šestistranné kostky). Získáte následující funkci hromadné pravděpodobnosti:
$$ P (X_n = p) = \ frac {1} {s ^ n} \ sum_ {k = 0} ^ {\ lfloor (pn) / 6 \ rfloor} (-1) ^ k {n \ zvolit k} {p-6k-1 \ zvolit n-1} $$
Komentáře
- Vítejte na našem webu, Felixe!
Odpověď
Charakteristické funkce mohou výpočty zahrnující součty a rozdíly náhodných proměnných opravdu usnadnit. Mathematica má spoustu funkcí pro práci se statistickými distribucemi, včetně vestavěného transformace distribuce na její charakteristickou funkci.
Líbí se mi pro ilustraci na dvou konkrétních příkladech: (1) Předpokládejme, že jste chtěli určit výsledky válcování kolekce kostek s odlišným počtem stran, např. hod dvě šestistranné kostky plus jedna osmistranná zemřít (tj. 2d6 + d8 )?Nebo (2) předpokládejme, že jste chtěli najít rozdíl dvou hodů kostkami (např. d6-d6 )?
Snadný způsob, jak to udělat, je použít charakteristické funkce základních diskrétních rovnoměrných distribucí. Pokud má náhodná proměnná $ X $ pravděpodobnostní hromadnou funkci $ f $, pak je její charakteristická funkce $ \ varphi_X (t) $ pouze diskrétní Fourierova transformace z $ f $, tj. $ \ Varphi_X (t) = \ mathcal {F} \ {f \} (t) = E [e ^ {it X }] $. Věta nám říká:
Pokud nezávislé náhodné proměnné $ X $ a $ Y $ mají odpovídající pravděpodobnostní hromadné funkce $ f $ a $ g $, pak pmf $ h $ ze součtu $ X + Y $ těchto RV je konvoluce jejich pmfs $ h (n) = (f \ ast g) (n) = \ sum_ {m = – \ infty} ^ \ infty f (m) g (nm) $.
Vlastnost konvoluce Fourierových transformací můžeme použít k jednoduššímu přepracování z hlediska charakteristických funkcí:
Charakteristická funkce $ \ varphi_ {X + Y} (t) $ součtu nezávislých náhodných proměnných $ X $ a $ Y $ se rovná součinu jejich charakteristických funkcí $ \ varphi_ {X} (t) \ varphi_ {Y} (t) $.
Tato funkce Mathematica vytvoří charakteristickou funkci pro jednostranný razník:
MakeCf[s_] := Module[{Cf}, Cf := CharacteristicFunction[DiscreteUniformDistribution[{1, s}], t]; Cf]
PMF distribuce lze získat z její charakteristické funkce, protože Fourierovy transformace jsou invertibilní. Zde je kód Mathematica:
RecoverPmf[Cf_] := Module[{F}, F[y_] := SeriesCoefficient[Cf /. t -> -I*Log[x], {x, 0, y}]; F]
Pokračujeme v našem příkladu, nechť F je pmf, který je výsledkem 2d6 + d8.
F := RecoverPmf[MakeCf[6]^2 MakeCf[8]]
Výsledky jsou $ 6 ^ 2 \ cdot 8 = 288 $. Doména podpory F je $ S = \ {3, \ ldots, 20 \} $. Tři jsou min, protože hodíte tři kostky. A dvacet je maximum, protože $ 20 = 2 \ cdot 6 + 8 $. Chcete-li vidět obrázek F, spočítejte
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}
Chcete-li znát počet výsledků, které činí 10, spočítejte
In:= 6^2 8 F[10] Out= 30
Pokud jsou nezávislé náhodné proměnné $ X $ a $ Y $ mají odpovídající pravděpodobnostní hromadné funkce $ f $ a $ g $, pak PMF $ h $ rozdílu $ X – Y $ těchto RV je vzájemná korelace jejich pmfs $ h (n) = (f \ star g) (n) = \ sum_ {m = – \ infty} ^ \ infty f (m) g (n + m) $ .
Můžeme použít vlastnost vzájemné korelace Fourierových transformací, abychom to jednoduše přepracovali z hlediska charakteristických funkcí:
Charakteristická funkce $ \ varphi_ {XY} (t) $ rozdílu dvou nezávislých náhodných proměnných $ {X, Y} $ se rovná součinu charakteristické funkce $ \ varphi_ {X} (t) $ a $ \ varphi_ {Y} (- t) $ (Poznámka záporné znaménko před proměnnou t ve druhém cha racteristic function).
Takže pomocí Mathematica najdete pmf G z d6-d6:
G := RecoverPmf[MakeCf[6] (MakeCf[6] /. t -> -t)]
Výsledky jsou $ 6 ^ 2 = 36 $. Doména podpory G je $ S = \ {- 5, \ ldots, 5 \} $. -5 je min, protože $ -5 = 1-6 $. A 5 je maximum, protože $ 6-1 = 5 $. Pokud chcete vidět obrázek G, spočítejte
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}
Komentáře
- Samozřejmě pro diskrétní distribuce, včetně distribucí konečné podpory (jako jsou ty, o kterých se zde jedná), je cf pouze funkce generující pravděpodobnost vyhodnocená při x = exp (it), což z ní činí komplikovanější způsob kódování stejných informací.
- @ whuber: Jak říkáte, cf, mgf a pgf jsou víceméně stejné a snadno transformovatelné do jednoho jiného, nicméně Mathematica má integrovaný cf, který pracuje se všemi pravděpodobnostními distribucemi, o kterých ví, zatímco to nemá ‚ vestavěný pgf. Díky tomu je kód Mathematica pro práci se součty (a rozdíly) kostek pomocí cfs obzvláště elegantní pro konstrukci, bez ohledu na složitost výrazu kostek, jak doufám, že jsem demonstroval výše. Navíc ‚ neuškodí vědět, jak mohou CFS, FT, konvoluce a vzájemné korelace pomoci vyřešit takové problémy.
- @Elisha: Dobré body , všichni. Myslím, že nejvíce mě zajímá, zda je vašich deset řádků kódu Mathematica opravdu více “ elegantních “ nebo účinnějších než jeden řádek, který jsem navrhl dříve (nebo ještě kratší řádek, který Srikant přivádí na Wolfram Alpha). Mám podezření, že vnitřní manipulace s charakteristickými funkcemi jsou náročnější než jednoduché konvoluce potřebné k znásobení polynomů. Určitě se tyto implementují snadněji ve většině ostatních softwarových prostředí, jak naznačuje odpověď Glen_b ‚. Výhodou vašeho přístupu je jeho větší obecnost.
Odpověď
Tady je další způsob výpočtu pravděpodobnosti rozdělení součtu dvou kostek ručně pomocí konvolucí.
Abychom udrželi příklad opravdu jednoduchý, chystáme se vypočítat rozdělení pravděpodobnosti součtu třístranné kostky (d3), jejíž náhodnou proměnnou budeme nazývat X a oboustranné kostky (d2 ), jehož náhodnou proměnnou budeme nazývat Y.
Chystáte se vytvořit tabulku. Do horního řádku napište rozdělení pravděpodobnosti X (výsledky válcování spravedlivého d3). Dolní levý sloupec , napište rozdělení pravděpodobnosti Y (výsledky válcování spravedlivého d2).
Chystáte se vytvořit vnější produkt horní řada pravděpodobností s levým sloupcem pravděpodobností. Například buňka vpravo dole bude produktem Pr [X = 3] = 1/3krát Pr [Y = 2] = 1/2, jak je znázorněno na přiloženém obrázku. V našem zjednodušujícím příkladu se všechny buňky rovnají 1/6.
Dále budete sčítat podél šikmých čar matice vnějšího produktu, jak je znázorněno v přiloženém schématu. Každá šikmá čára prochází jedna nebo více buněk, které jsem barevně označil stejně: Horní řádek prochází jednou modrou buňkou, další řádek prochází dvěma červenými buňkami atd.
Každá ze součtů podél šikmých ploch představuje pravděpodobnost výsledného rozdělení. Například součet červených krvinek se rovná pravděpodobnosti součtu dvou kostek na 3. Tyto pravděpodobnosti jsou zobrazeny na pravé straně doprovodného diagramu.
Tuto techniku lze použít s libovolnými dvěma samostatnými distribucemi s konečnou podporou. A můžete to použít iterativně. Například pokud chcete znát rozdělení tří šestistranných kostek (3d6), můžete nejprve vypočítat 2d6 = d6 + d6; pak 3d6 = d6 + 2d6.
K dispozici je bezplatný (ale uzavřená licence) programovací jazyk s názvem J . Je to jazyk založený na poli s kořeny v APL. Má vestavěné operátory k provádění vnějších produktů a součtů podél šikmých matic, takže implementace techniky, kterou jsem ilustroval, je velmi jednoduchá.
V následujícím kódu J definuji dvě slovesa. Nejprve sloveso d
zkonstruuje pole představující pmf jednostranné matrice. Například d 6
je pmf šestistranné matrice. Zadruhé, sloveso conv
najde vnější součin dvou polí a součtů podél šikmých čar. Takže conv~ d 6
vytiskne pmf 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
Jak vidíte, J je záhadný, ale strohý .
Odpověď
Milujte uživatelské jméno! Výborně 🙂
Výsledkem, který byste měli počítat, jsou hody kostkami, všechny jsou $ 6 \ krát 6 = 36 $, jak je uvedeno v tabulce.
Například $ \ frac {1} {36} $ času je součet $ 2 $ a $ \ frac {2} {36} $ času je $ 3 $ a $ \ frac {4} {36} $ času částka je $ 4 $ atd.
Komentáře
- Jsem ‚ skutečně zmaten tento. Odpověděl jsem na nedávnou otázku pro nováčky od někoho, kdo se jmenoval die_hard, který zjevně již neexistuje, a pak jsem našel svoji odpověď připojenou k tomuto starodávnému vláknu!
- Vaše odpověď na otázku na stats.stackexchange.com/questions/173434/… byl sloučen s odpověďmi na tento duplikát.
Odpověď
Toto můžete vyřešit rekurzivním vzorcem. V takovém případě se pravděpodobnost hodů s kostkami $ n $ kostkami počítá podle hodů s kostkami $ n-1 $.
$$ a_n (l) = \ sum_ {l-6 \ leq k \ leq l-1 \\ \ text {and} n-1 \ leq k \ leq 6 (n-1)} a_ {n-1} (k) $$
První limit pro k v součet je šest předcházejících čísel. Např. Pokud chcete hodit 13 se 3 kostkami, můžete to udělat, pokud se vaše první dvě kostky hodí mezi 7 a 12.
Druhý limit pro k v součtu je limit toho, s čím můžete házet n-1 kostky
Výsledek:
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
Upravit: Výše uvedená odpověď byla odpovědí z další otázky , kterou do otázky spojil C.Ross
Níže uvedený kód ukazuje, jak byly výpočty pro tuto odpověď (na otázku požadující 5 kostek) provedeny v R. Jsou podobné součtem provedeným v aplikaci Excel v odpovědi od 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)})
Komentáře
- @ user67275 byla vaše otázka sloučena do této otázky. Zajímalo by mě, jaký byl váš nápad za vaším vzorcem: “ Použil jsem vzorec: žádný ze způsobů, jak získat 8: 5_H_2 = 6_C_2 = 15 “ ?
Odpověď
Jedním z přístupů je říci, že pravděpodobnost $ X_n = k $ je koeficient $ x ^ {k} $ v rozšíření generující funkce $$ \ left (\ frac {x ^ 6 + x ^ 5 + x ^ 4 + x ^ 3 + x ^ 2 + x ^ 1} {6} \ vpravo) ^ n = \ left (\ frac {x (1-x ^ 6)} {6 (1-x)} \ right) ^ n $$
Takže například se šesti kostkami a cílem $ k = 22 $ najdete $ P (X_6 = 22) = \ frac {10} {6 ^ 6} $. Tento odkaz (na otázku math.stackexchange) poskytuje i jiné přístupy
Napsat komentář