微信红包模拟

目录

  1. 实验目的
  2. 实验原理
  3. 实验步骤
  4. 实验结果及分析
  5. “运气王”游戏模拟
  6. 程序代码

一、实验目的

1.学习并掌握matlab模拟随机过程的方法。

2.验证切比雪夫大数定律。

3.探索微信红包抽取顺序与抽取金额的关系。

4.探索微信红包“运气王”游戏获得最大利益的方案。

二、实验原理

1. 离散均匀分布

离散均匀分布是统计学中的一种离散型分布族。常记为{DiscreteU(a,b):a<b};

n=[b-ah],随机变量X的取值为X=a+ih,i=0,1,2,…,n-1;概率分布函数为P(X=a+ih)=1/n, i=0,1,2,…,n-1.那么称此随机变量服从参数为a,b,h的离散均匀分布。

2.微信红包抽取金额的分布Yi

设有n个人,Xi,i=1,2,..,n,依次抽取微信红包,红包总额为H元,记Xi抢到的金额为Yi元。每次抽红包的金额服从0.01到剩余金额的均值的两倍的左闭右开区间上的离散均匀分布,且最后一人获得剩余所有金额,即

PYi=0.01k=n-i+1200(H-j=1i-1Yj)-n+i-1,200(H-j=1i-1Yj)n-i+1为整数1200(H-j=1i-1Yj)n-i+1,200(H-j=1i-1Yj)n-i+1不为整数

i=1,2,…,n-1

k=1,2,…,N

N=200(H-j=1i-1Yj)n-i+1-1,200(H-j=1i-1Yj)n-i+1为整数200(H-j=1i-1Yj)n-i+1,200(H-j=1i-1Yj)n-i+1不为整数

Yn=H-i=1n-1Yi.

Y1的期望EY1Y2的期望E(Y2),考虑10个人,依次抽取总额为100元的红包的情形,则

EY1=i=119990.01k*11999=10

3.切比雪夫大数定律

考虑每人抽到红包的金额的期望,因为DYi有限,i=1,2,…,n,所以由切比雪夫大数定律有,∀ε>0,

limn→∞PEYi-1ni=1nYii<ε=1

三、实验步骤

1.编写程序1,模拟10人抽取总额为100元的红包,模拟100000次,记录每人成为运气王的频率,重复10次。并绘制成为运气王的频率与抽取红包顺序的关系图。

2.编写程序2,模拟10人抽取总额为100元的红包,模拟100000次,记录每人抽取金额的均值与方差。并绘制每人抽取金额的均值、方差分别与抽取红包顺序的关系图。

四、实验结果及分析

1. 成为运气王的频率与抽取顺序的关系

频率分布表为:

频率分布图为:

结果分析:在10人抽取红包种,第5位成为运气王的频率最低;第5位之后,成为运气王的频率逐渐上升;第9位、10位成为运气王的频率较高,且近似相等。

2.抽取金额均值、方差分别与抽取顺序的关系

抽取金额均值与抽取顺序的关系表:

抽取金额均值与抽取顺序的关系图:

抽取金额方差与抽取顺序的关系表:

抽取金额方差与抽取顺序的关系图:

结果分析:

(1)第一位抽取红包的人所抽取的金额的均值为9.98,接近10,符合切比雪夫大数定律。

(2)取的期望金额与顺序无关,但随着抽取顺序的增加,抽取金额的方差逐渐增大。

3.抽取红包的顺序与收益的关系

(1)当抽取次数足够多时,抽取金额的期望与抽取顺序无关。

(2)当抽取次数较少时,抽取顺序越靠后,抽到最大红包的概率越大,但抽取金额的方差也越大,即抽到较小红包的概率变大,风险增大。

五、“运气王”游戏模拟

游戏1:10人进行抢红包游戏,每人抢红包的顺序不变,抢到的金额如上分布,每人有初始金额1000元,有初始红包100元,每局的手气最的人发100元红包进行下一局,当一局游戏结束时,若有一人的剩余金额小于100,则游戏结束。

游戏2:在游戏1的基础上,将每局发红包的人由“手气最佳的人”改为“手气最差的人”。其余保持不变。

实验步骤:编写程序3模拟游戏1,编写程序4模拟游戏2,并记录游戏结束时,平均游戏局数与平均剩余金额。若令Moneyi为每一局游戏结束时每人的剩余金额,Yij为第i局游戏中结束时,第j个人的剩余金额,则

Moneyi=[Yi1,Yi2,…,Yin]

Moneyi为带吸收壁的随机游动过程。

模拟结果:

游戏1:运行结果:

平均游戏局数:averagek = 246.3463

平均剩余金额如下图:

结论:前7位预期收益为正,后3位预期收益为负;第4、5的预期收益最大,第9、10的预期亏损最大。

Game2:

平均游戏局数:averagek = 169.7919

平均剩余金额如下图:

结论:前7位预期收益为正,后3位的预期收益为负;且随着抽取顺序的靠后,预期收益逐渐变小。

六、程序代码

程序1

%n个人x1,x2,...,xn,H元红包,xi抽到yi元红包,sup为每次取红包上界

%模拟m次

function lottery(n,H,m)

y=zeros(m,n);kinglucknum=zeros(1,n);

for j=1:m

    sum=0;

for i=1:n-1

    sup=2*(H-sum)/(n-i+1);

    if floor(100*sup)==(100*sup)

        y(j,i)=unidrnd(100*sup-1)/100;

    else

        y(j,i)=unidrnd(floor(100*sup))/100;

    end

    sum=sum+y(j,i);

end

y(j,n)=H-sum;

example=y(j,:);

[~,who]=max(example);

kinglucknum(who)=kinglucknum(who)+1;

end

[~,kingluck]=max(kinglucknum);

kinglucknum

kingluck

rate=kinglucknum/m;

plot(rate)

end

程序2

%n个人x1,x2,...,xn,H元红包,xi抽到yi元红包,sup为每次取红包上界

%模拟m次

function expectation(n,H,m)

y=zeros(m,n);average=zeros(1,n);variance=zeros(1,n);

for j=1:m

    sum=0;

for i=1:n-1

    sup=2*(H-sum)/(n-i+1);

    if floor(100*sup)==(100*sup)

        y(j,i)=unidrnd(100*sup-1)/100;

    else

        y(j,i)=unidrnd(floor(100*sup))/100;

    end

    sum=sum+y(j,i);

end

y(j,n)=H-sum;

end

for i=1:n

    for j=1:m

    average(i)=average(i)+y(j,i);

    end

    average(i)=average(i)/m;

end

for i=1:n

    for j=1:m

        variance(i)=variance(i)+(y(j,i)-average(i))^2;

    end

    variance(i)=variance(i)/m;

end

N=1:n;

average,variance

figure(1)

scatter(N,average)

box off

figure(2)

scatter(N,variance)

box off

end

程序3

function game1(n,H,m,M0)

%n:人数;H:红包金额;m:模拟次数;M0:初始金额;k局数;

%averagemoney:每人剩余金额的期望;average:游戏局数的均值

money=M0*ones(m,n);k=zeros(1,m);

for j=1:m

y=zeros(1,n);

while all(money(j,:)>=H)

    k(j)=k(j)+1;sum=0;

    if k(j)>1

        money(j,who0)=money(j,who0)-H;

    end

for i=1:n-1

    sup=2*(H-sum)/(n-i+1);

    if floor(100*sup)==(100*sup)

        y(i)=unidrnd(100*sup-1)/100;

    else

        y(i)=unidrnd(floor(100*sup))/100;

    end

    money(j,i)=money(j,i)+y(i);

    sum=sum+y(i);

end

y(n)=H-sum;money(j,n)=money(j,n)+y(n);

[~,who0]=max(y);

end

end

T=1:n;

averagemoney=mean(money,1);averagek=mean(k)

scatter(T,averagemoney)

end

程序4:

function game2(n,H,m,M0)

%n:人数;H:红包金额;m:模拟次数;M0:初始金额;k局数;

%averagemoney:每人剩余金额的期望;average:游戏局数的均值

money=M0*ones(m,n);k=zeros(1,m);

for j=1:m

y=zeros(1,n);

while all(money(j,:)>=H)

    k(j)=k(j)+1;sum=0;

    if k(j)>1

        money(j,who0)=money(j,who0)-H;

    end

for i=1:n-1

    sup=2*(H-sum)/(n-i+1);

    if floor(100*sup)==(100*sup)

        y(i)=unidrnd(100*sup-1)/100;

    else

        y(i)=unidrnd(floor(100*sup))/100;

    end

    money(j,i)=money(j,i)+y(i);

    sum=sum+y(i);

end

y(n)=H-sum;money(j,n)=money(j,n)+y(n);

[~,who0]=min(y);

end

end

T=1:n;

averagemoney=mean(money,1);averagek=mean(k)

scatter(T,averagemoney)

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值