matlab代码实现下题,1.有一种游戏规则如下:每次庄家抛掷三个骰子,玩家支付1元并随意的押注一个数字,若三个骰子中恰好有一个骰子的点数和玩家押注的数字相同,则庄家退还给玩家1元并额外奖励玩家1元;若恰好有二个骰子的点数和玩家押注的数字相同,则庄家退还给玩家1元并额外奖励玩家2元;若恰好有三个骰子的点数和玩家押注的数字相同,则庄家退还给玩家1元并额外奖励玩家3元。 (1)随机生成1000名玩家,每位玩家初始资金都是100元,骰子的点数随机产生,每位玩家选择策略随机,且每位玩家都连续押注500次(若中途资金为零则终止游戏)。游戏结束后,给出这1000名玩家资金的最大值、最小值、平均值、中位数;并绘制出这1000名玩家最终资金的直方图。 (2)用概率论知识对上述结果进行理论分析。
时间: 2023-12-25 17:04:42 浏览: 119
以下是MATLAB代码实现:
```matlab
% 游戏规则
% 每次庄家抛掷三个骰子
% 玩家支付1元并随意的押注一个数字
% 若三个骰子中恰好有一个骰子的点数和玩家押注的数字相同,
% 则庄家退还给玩家1元并额外奖励玩家1元;
% 若恰好有二个骰子的点数和玩家押注的数字相同,
% 则庄家退还给玩家1元并额外奖励玩家2元;
% 若恰好有三个骰子的点数和玩家押注的数字相同,
% 则庄家退还给玩家1元并额外奖励玩家3元。
% 生成1000名玩家,每位玩家初始资金都是100元
num_player = 1000;
init_funds = 100 * ones(num_player, 1);
player_funds = init_funds;
% 连续押注500次
num_bets = 500;
% 记录每位玩家的押注数字
player_choices = randi(6, num_player, num_bets);
% 模拟游戏
for i = 1:num_bets
% 庄家抛掷三个骰子
dice = randi(6, 1, 3);
% 检查每位玩家是否中奖
for j = 1:num_player
% 玩家押注的数字
choice = player_choices(j, i);
% 判断中奖情况并更新玩家资金
if sum(dice == choice) == 1
player_funds(j) = player_funds(j) + 2;
elseif sum(dice == choice) == 2
player_funds(j) = player_funds(j) + 3;
elseif sum(dice == choice) == 3
player_funds(j) = player_funds(j) + 4;
else
player_funds(j) = player_funds(j) - 1;
end
% 检查玩家资金是否低于零,如果是则终止游戏
if player_funds(j) < 0
player_funds(j) = 0;
end
end
end
% 输出结果
fprintf('最大值:%f\n', max(player_funds));
fprintf('最小值:%f\n', min(player_funds));
fprintf('平均值:%f\n', mean(player_funds));
fprintf('中位数:%f\n', median(player_funds));
% 绘制直方图
histogram(player_funds);
xlabel('玩家资金');
ylabel('人数');
title('玩家资金直方图');
```
根据游戏规则,每次玩家押注的胜率为$1/6$。因此,理论上玩家在500次押注中获胜的期望次数为$500/6 \approx 83.33$次。
根据期望计算,玩家在500次押注中赢得的期望金额为:
$$
\begin{aligned}
E[\text{获胜次数}] &= 500/6 \\
E[\text{额外奖励}] &= 1 \times \frac{500}{6} + 2 \times \frac{500}{36} + 3 \times \frac{500}{216} \\
&\approx 83.33 + 13.89 + 2.32 \\
&= 99.54 \\
E[\text{总收益}] &= (1 + E[\text{额外奖励}]) \times E[\text{获胜次数}] - (500 - E[\text{获胜次数}]) \\
&= 99.54 \times \frac{500}{6} - 416.67 \\
&\approx 793.06
\end{aligned}
$$
因此,如果每位玩家连续押注500次,则理论上最终资金的期望值应该接近于$100 + 793.06 = 893.06$。
阅读全文