【问题标题】:Using matlab to measure probability of picking coloured cards用matlab测取彩卡的概率
【发布时间】:2013-12-12 07:53:20
【问题描述】:

好的,所以我想使用 matlab 生成 40 张卡片,每 10 张是不同的颜色,红色、蓝色、绿色和紫色或任何你想要的。每次你选择一张卡片时,它都会被移除,我已经计算出纸上的概率

1 x 30/39 x 20/38 x 10/37 
10.94%

1 因为你肯定会第一次选择一张牌,然后你有 30/39 的机会选择不同的颜色,然后有 20/38 的机会选择最后两种颜色,然后有 10/37 的机会选择最后一种颜色颜色。

我想知道有人会如何在 matlab 中模拟这个。我认为你可以生成一个 4x10 的 1 到 40 之间的随机数矩阵,然后检查每一行并将每个数字更改为相应的颜色字母,以便 1-10 之间的数字变为 R,11-20 变为蓝色等。

然后查看每一行,如果该行包含 R B G P (以任何顺序),则计数器步骤。然后从计数器中取出金额,除以总行数,如果您尝试 100、1000、10000、1000000 等,它应该会达到大约 10%,然后更接近。

但我不知道如何进行迭代以将数字更改为字母或检查它包含的内容。有没有人有任何想法或更好/更简单的方法来做到这一点?

谢谢

【问题讨论】:

    标签: matlab probability


    【解决方案1】:

    您可以使用randsample(来自统计工具箱)进行抽样而不用替换:

    I = 1e5; %// how many samples to take
    successes = 0; %// this will contain how many samples are successful
    for ii = 1:I
      sample = randsample(40,4); %// sample without replacement
      successes = successes + all(sort(ceil(sample/10)) == (1:4).'); %'// a sample is
      %// successful if it contains all four colours. 1st colour = cards 1 to 10;
      %// 2nd colour = cards 11 to 20, etc.
    end
    estimate = successes/I %// estimate of success probability
    

    【讨论】:

    • 谢谢,这似乎有效!你能更详细地解释一下success(ii) = all(sorts(ceil(sample/10)) == (1:4).') 的作用吗?
    • 假设样本是“成功的”。这意味着在第 1--10 组(颜色 1)中有一张牌,在第 11--20 组(颜色 2)中有一张牌,等等。然后将ceil(( )/10) 应用于这四张成功的牌将给出 1、2、3、4 ,不一定按这个顺序。所以应用sort(即使用颜色顺序对卡片样本进行排序),然后测试第一张卡片是否为颜色1,第二张卡片是否为颜色2,依此类推(即all部分)。
    • 哇。这很聪明。我非常喜欢那个!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多