一道Matlab题目,关于蒙特卡罗函数的,诚寻高手

本人完全编程小白,摊上这么一道题目:街头常见一类“摸球游戏”,一袋装有16个大小形状相同的玻璃球,其中8个白色,8个红色,游戏者从中一次摸出8个,8个球中,两种颜色出现如下比数时,摸球者可得到相应的“奖励”或“惩罚”。

请用蒙特卡洛方法求解。
请问什么是蒙特卡洛方法。。怎么解。。。

第1个回答  2013-07-08
需要蒙特卡洛方法?
高中的排列组合就可以了
在matlab函数里有一个nchoosek(n,k)就是在n中选择k个的可能性
16个选8的可能性有nchoosek(16,8)=12870种
A的可能性有nchoosek(8,8)*nchoosek(8,0)*2=2种可能,概率2/12870=0.0155%
B的可能性有nchoosek(8,7)*nchoosek(8,1)*2=128种可能,概率128/12870=0.99%
C的可能性有nchoosek(8,6)*nchoosek(8,2)*2=1568种可能,概率1568/12870=12.18%
D的可能性有nchoosek(8,5)*nchoosek(8,3)*2=6272种可能,概率6272/12870=48.73%
E的可能性有nchoosek(8,4)*nchoosek(8,4)=4900种可能,概率4900/12870=38.07%

这类游戏期望值为10*0.0155%+1*0.99%+0.5*12.18%+0.2*48.73%-3*38.07%=-0.9723
也就是说你如果你玩足够多次的话,平均每次回输0.9723元追问

亲,如果一定要用蒙特卡洛方法呢。。。

追答

rand('state',sum(100*clock));
n=1e6;
A=0;B=0;C=0;D=0;E=0;
for i=1:n
examp=randperm(16);
num=sum(examp(1:8)<=8);
if num==0||num==8
A=A+1;
elseif num==1||num==7
B=B+1;
elseif num==2||num==6
C=C+1;
elseif num==3||num==5
D=D+1;
else
E=E+1;
end
end
pa=A/n;pb=B/n;pc=C/n;pd=D/n;pe=E/n;
ep=10*pa+1*pb+0.5*pc+0.2*pd-3*pe;

本回答被提问者和网友采纳
第2个回答  2013-07-07
只不过需要N次模拟而已。相当于你没死生成一个随机(a到e中的一种)让后算分。N以后全N的和看看结果是多少。。。通俗来说你当庄你设计了这个奖金规则模拟N次以后看你是赢了还是亏了。追问

我对于matlab是零基础.......几乎完全不懂~求具体的编程语言......

追答

unifrnd(A,B) 最核心的就是它了。。。返回A B之间的一个随机数。。比如你连续调16次用unifrnd(0,1)一次结果是假如结果依次是00000000(假定0是白色球1是红色球)那么就是8个白是10分。这就相当于蒙特卡洛方法模拟一次。。。你循环1000次就相当于模拟1000次抓球。具体要你求什么你也没写出来。求N次以后的奖金罚金情况?

追问

嗯!就是问玩这个游戏值不值!亲。。为什么木有回音了TAT

相似回答