Re: Coin Toss Simulation
- To: mathgroup at smc.vnet.net
- Subject: [mg122374] Re: Coin Toss Simulation
- From: "Tony Harker" <a.harker at ucl.ac.uk>
- Date: Thu, 27 Oct 2011 06:27:51 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
The problem is that you use Set Delayed (:=) everywhere rather than Set (=).
This means that neither s nor g are evaluated until they are used. So, when
{g,s} is calculated this is what happens:
1. a value is calculated for g, and becomes the first element of the list
2. with that done and dusted, Mathematica moves on to compute s.
i) s requires a value for g, so
ii) compute a new value for g (because of the SetDelayed)
iii) count the heads
iv) make that the second element of the list.
As a result, the list of heads and tails and the count of heads in the
returned answer do not correspond.
This would work:
y[n_] := Block[{g, s}, g = RandomChoice[{"head", "tail"}, n];
s := Count[g, "head"];
{g, s}]
Or, neater perhaps,
y[n_]:={#,Count[#,"head"]}&[ RandomChoice[{"head", "tail"}, n]]
Tony
]-> -----Original Message-----
]-> From: pooleman133 [mailto:poolebc221 at gmail.com]
]-> Sent: 26 October 2011 22:39
]-> To: mathgroup at smc.vnet.net
]-> Subject: Coin Toss Sim
]->
]-> I am new to mathematica and am trying to make a coin flipping simulation
]-> however mo code isn't working. When I tell it to count the number of
head
]-> it gives me a bad count. The code I am using is listed below any help
would
]-> be greatly appreciated.
]->
]-> y[n_] := Block[{g, s},
]->
]->
]-> g := RandomChoice[{"head", "tail"}, n];
]-> s := Count[g, "head"];
]-> {g, s}
]-> ]