两道似乎是用matlab编的题,急!
1. 某人写了n封信,又写了n个信封,然后将这n封信随机地装入这n个信封中,用Pn表示至少有一封信装对的概率。
2. 编制程序,用随机数模拟至少20000次,求当n=10时,Pn的值。
3. 重复第一步,画出n=2,3,…50时,Pn的散点图
二.
1.设x1,x2, …,xn相互独立且都服从区间[0,1]上的均匀分布,f(x)为区间[0,1]上的一个可积函数。由大数定律可知 …+xn)以依概率收敛于Ef(xi)=(积分号 0~1f(x)dx),编制程序,用随机数模拟至少40000次,近似地求下列两个积分的值:
积分号0~1 (x上有个平方)的积分和积分号0~1 sinx/x的积分(抱歉,这个我实在是打不出来了,本想用mathtype,不知怎么又禁用了,大家将就着看吧) 展开
第一个问题的答案如下,第二个问题还是没有看明白你的要求,你最好把公式变成个图片插入进来,或者你看看能不能根据第一个问题的程序,自己尝试解决一下第二个问题,积分可以用求和来近似表示。
% 这段程序得到n=10时,对应的Pn
clear;
clc;
n=10
sum_right=0; %投递2000次中,至少有一封信投递正确的次数,初始值为零
for ii=1:2000
a1=1:n; %数组a1中依次存放的是n个信箱号,从1到n
[a,a2]=sort(rand(1,n));
%用随机数函数rand产生一个随机序列,然后从小到大排序,大小顺序号存放到数组a2中
num_right=sum(a1==a2);
%依次比较数组a1和a2中的每个元素,如果相同则为1,不同则为0,num_right中计算1的个数,即为投递正确的个数
if num_right>0 %如果num_right>0则说明至少有一封信投递正确了
sum_right=sum_right+1;
end
end
Pn=sum_right/2000 %得到Pn
% 这段程序得到n从2到50时,求出每个n对应的Pn,并绘制散点图
nn=2:50;
Pnn=zeros(1,length(nn));
for jj=1:length(nn)
n=nn(jj);
sum_right=0;
for ii=1:2000
a1=1:n;
[a,a2]=sort(rand(1,n));
num_right=sum(a1==a2);
if num_right>0
sum_right=sum_right+1;
end
end
Pnn(jj)=sum_right/2000;
end
figure
plot(nn,Pnn,'*')%绘制散点图
这是我得到的图片。由于是随机数,每次运行的结果可能不一样。
第二个问题就是e的(X的平方)次方从0到1的积分以及sinx除以x的从0到1的积分,模拟4万次。这个我从没学过matlab,所以才求帮助啊,请这位大神帮帮忙~谢谢
要是这样的话,第二题就比较简单了。
% 下面这段程序求解e的(x^2)次方在(0,1)的积分
clear;
clc;
sum_1=0;
for i=1:40000
x1=rand; %产生一个随机数
sum_1=sum_1+exp(x1^2);
end
result_1=sum_1/40000
%result_1即为e的(x^2)次方积分的结果,用40000个随机数的函数值的平均数来近似表示
% 下面这段程序求解sin(x)/x在(0,1)的积分
sum_2=0;
for i=1:40000
x2=rand;%产生一个随机数
sum_2=sum_2+sin(x2)/x2;
end
result_2=sum_2/40000
%result_2即为sin(x)/x积分的结果,用40000个随机数的函数值的平均数来近似表示