matlab程序问题。需要用到蒙特卡洛方法

2024-05-17 02:58

1. matlab程序问题。需要用到蒙特卡洛方法

你给出的解是正确的
首先假设有编号为1~16的16个球,其中 
编号1~8,8个球是红色,那么9~16,8个球是白色

n=1e6;                                     %游戏100万次
A=0;B=0;C=0;D=0;E=0;           %得奖统计清零
 
for i=1:n
    examp=randperm(16);        %随机打乱1~16,16个自然数
    num=sum(examp(1:8)<=8);   %examp(1:8)取出前8个,就是从16个球中随机抽8个
                                                 %sum(examp(1:8)<=8),就是统计编号小于8的球的数量
                                                  %也就是红球的个数
    if num==0||num==8                
        A=A+1;                            %如果8个都是红球,或者没有红球,A类统计加以
    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                                  %100万次抽球后,A,B,C,D,E的次数都一一统计记录
t=10*A/n+1*B/n+0.5*C/n+0.2*D/n-3*E/n
%A/n就是得到A奖的概率,以此类推
%用每个将的奖金乘以奖的概率,再相加,得到了奖金的期望
%结果表明,按照概率统计,平局每局要亏掉差不多1块钱

matlab程序问题。需要用到蒙特卡洛方法

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

需要蒙特卡洛方法?
高中的排列组合就可以了
在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元