实验十四.随机模拟

实验内容

1.(简答题) 某箱中有28个红球与49个黑球,从中任取5球,则取得2红3黑的概率为多少?(写出随机模拟M程序,并模拟与理论结果比较)

2. (简答题) 袋中有a个红球与b个黑球,甲乙轮流在口袋中摸球,每次摸得一球且不放回,则在以下情形下甲先取得红球的概率为多少?(1)a=10,b=10;(2)a=6,b=8(写出随机模拟M程序,并模拟与理论结果比较)

3. (简答题) 使用随机模拟方法计算圆周率。(写出随机模拟M程序)

4. (简答题) 青菜的购进价:2.2元/斤,零售价:3.5元/斤,处理价:1.2元/斤。若每天卖出的青菜服从N(320,28^2)的正态分布,问每天应该购进多少斤青菜可以使得收益最大?(写出随机模拟M程序,并模拟与理论结果比较)

5. (简答题) 随机模拟求解全局最优化问题,求解以下函数的最大值。f(x)=(1-x³)sin(3x),x∈(-2π,2π)。(写出详细的求解M程序,并展示求解结果)

实 验 步 骤、过 程

1.

解:引入77个数1~77,其中1~28表示红球,29~77表示黑球。将这77个数组成的向量随机打乱1e+5次,形成一个(1e+5)*77的数组。在这个数组中任意选取5列,(不妨选前五列)设其中满足“1~28的个数=2 且 29~78的个数=3”的有C组,则所求的概率为P=C/100000。

编制函数文件:

s=zeros(1e+5,5);
for k=1:1e+5
    s(k,:)=randperm(77,5);
end
A1=sum(s<29,2);
A2=sum(s>=29,2);
C=A1==2 & A2==3;
P=sum(C)/100000

 2.(1)

编制函数文件:

m=1000;
n=20;%红球是1到10,黑球是11到20
c=20;
p=0;
for t=1:m
    k1=0;%甲红球次数
    k2=0;%甲黑球次数
    k3=0;%乙红球
    k4=0;%乙黑球
    for a=1:c
        x=randperm(c);%将20个数打乱位置
        if x(1,1)<=10
        k1=k1+1;
        end
        if x(1,2)<=10
            k3=k3+1;
        end
        x(1:2)=[];%默认第一个数是甲的,第二个数是乙的
        if k1==1
            p=p+1
            break%甲抽到红球跳出循环
        end
        if k3==1
            break
        end
    end
end
pp=p/m

(2)

编制函数文件:

m=1000;
n=14;%红球是1到6,黑球是7到14
c=14;
p=0;
for t=1:m
    k1=0;%甲红球次数
    k2=0;%甲黑球次数
    k3=0;%乙红球
    k4=0;%乙黑球
    for a=1:c
        x=randperm(c);%将14个数打乱位置
        if x(1,1)<=6
        k1=k1+1;
        end
        if x(1,2)<=8
            k3=k3+1;
        end
        x(1:2)=[];%默认第一个数是甲的,第二个数是乙的
        if k1==1
            p=p+1
            break%甲抽到红球跳出循环
        end
        if k3==1
            break
        end
    end
end
pp=p/m

 3.

编制函数文件:

n=1000000;
a=rand(n,1);
%必须用rand指令而不能用randn指令因为产生的随机数必须是均匀的
b=rand(n,1);
c=find(a.^2+b.^2<=1);
d=length(c);
pi=d/n*4

  4.

编制函数文件:

function[number ,val]=su(a,b,c,mu,sigma,n)
%报童问题,a售出价格,b进购价格,c退回价格
%mu、sigma分别表示正态分布的期望与根方差,n表示生成随机向量维数号number为最优值,,val为平均收益
v1=round(normrnd(mu,sigma,[1,n]));
v2=(mu-3*sigma):(mu+3*sigma);
m=length(v2);
v3=zeros(1,m);
for i=1:m
    x=v2(i);
    ss=0;
    for j=1:n
        y=v1(j);
        if x<=y
            ss=ss+(a-b)*x;
        else
            ss=ss+y*(a-b)-(x-y)*(b-c);
        end
    end
    v3(i)=ss;
end
v3=v3/n;
test=v3(1);
tt=1;
for i=2:m
    if test<v3(i);
        test=v3(i);
        tt=i;
    end
end
number=v2(tt);
val=test;

在命令行输入

>> [x1,x2]=su(3.5,2.2,1.2,320,28,100000)

 5.

在命令行输入

>> x=unifrnd(-2*pi,2*pi,10000,1);
>> f=-(1-x.^3).*sin(3.*x);
>> fmax=max(f)

答案供参考,如有错误请自行改正,本人只是随意分享之前的作业,代码均来源于网络+个人稍微修改,认为有用可参考哈~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值