DUT概率论与数理统计上机实习作业.docx

上传人:b****5 文档编号:7283019 上传时间:2023-01-22 格式:DOCX 页数:13 大小:336.35KB
下载 相关 举报
DUT概率论与数理统计上机实习作业.docx_第1页
第1页 / 共13页
DUT概率论与数理统计上机实习作业.docx_第2页
第2页 / 共13页
DUT概率论与数理统计上机实习作业.docx_第3页
第3页 / 共13页
DUT概率论与数理统计上机实习作业.docx_第4页
第4页 / 共13页
DUT概率论与数理统计上机实习作业.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DUT概率论与数理统计上机实习作业.docx

《DUT概率论与数理统计上机实习作业.docx》由会员分享,可在线阅读,更多相关《DUT概率论与数理统计上机实习作业.docx(13页珍藏版)》请在冰豆网上搜索。

DUT概率论与数理统计上机实习作业.docx

DUT概率论与数理统计上机实习作业

概率论与数理统计上机实习题目

一、某人写了n封信,又写了n个信封,然后将这n封信随机地装入这n个信封中,用Pn表示至少有一封信装对的概率。

1.编制程序,用随机数模拟至少20000次,求当n=10时,Pn的值。

2.重复第一步,画出n=2,3,…,50时,Pn的散点图。

解:

1.用C语言编程序。

以1~10的从小到大的排列为这10个信封的位置储存在数组a[10]中,用C语言中的随机数生成函数生成一组10个无重复的1~10之间的数的随机序列储存在数组b[10]中。

把数组b中的元素从b[0]到b[9]分别与a[0]到a[9]比较大小,若比较到某一对元素相同则已可表示“至少有一封信装对”事件发生,停止本次试验并进行下一次试验,直至试验了20000次,用m来计算20000次试验中“至少有一封信装对”发生的次数。

由程序运行的结果(见下图)可知n=10时Pn=0.628550

程序代码如下:

#include

#include

#include

intmain()

{

inti,j,k,m=0,a[10]={1,2,3,4,5,6,7,8,9,10},b[10];//a[10]代表10封信.b[10]是10个信封,随机生成一组1~10的数.

doublePn;

time_tt;

srand((unsigned)time(&t));//用来生成随机数.

for(i=1;i<20001;i++)//进行20000次随机模拟;

{

printf("第%d次模拟试验中每封信的位置:

",i);

for(j=0;j<10;j++)

{

b[j]=a[rand()%10];

k=0;

while(k

{

if(b[j]==b[k])

{

b[j]=a[rand()%10];

k=0;

}

else

k++;

}

printf("%3d",b[j]);//打印出来可以方便检查错误.

}

printf("\n");

for(j=0;j<10;j++)

{

if(b[j]==a[j])//检查信与信封是否配对.

{

m+=1;//一次模拟中一旦有一封信放对了则m增加1,不必再检查下去.

break;

}

else

continue;

}

}

Pn=1.0*m/20000;

printf("m=%d,Pn=%f\n",m,Pn);

}

2.求n为2~50的Pn与n=10时相同,只需把n=10修改成相应的数值即可。

下表是n为2~50时的Pn值表:

n

Pn

2

0.500650

3

0.658050

4

0.628650

5

0.621200

6

0.633450

7

0.629550

8

0.631000

9

0.627400

10

0.628550

11

0.627050

12

0.636800

13

0.641700

14

0.624150

15

0.629850

16

0.628800

17

0.627700

18

0.637850

19

0.629700

20

0.629950

21

0.633300

22

0.631000

23

0.629050

24

0.626600

25

0.631000

26

0.631800

27

0.634800

28

0.626800

29

0.632550

30

0.635200

31

0.633800

32

0.635300

33

0.637300

34

0.628200

35

0.634050

36

0.632500

37

0.627900

38

0.628400

39

0.632000

40

0.636000

41

0.630700

42

0.630850

43

0.630450

44

0.637450

45

0.630300

46

0.632650

47

0.626950

48

0.628700

49

0.630100

50

0.636500

由此表数据用Excel处理可得Pn的散点图如下:

二、设X1,X2,…,Xn相互独立且都服从区间[0,1]上的均匀分布,

为区间[0,1]上的一个可积函数由大数定律可知

依概率收敛于

=

,编制程序,用随机数模拟至少40000次,近似地求下列两个积分的值:

解:

1.用C语言编写程序。

利用随机数函数模拟45000次,得到45000个0~1之间的数(即Xi),用sum把它们的

的值全部加和,再除以45000就是平均值

.

程序代码如下:

#include

#include

#include

#include

intmain()

{

inti;

doublex,sum=0,e=2.718281828;

time_tt;

srand((unsigned)time(&t));

for(i=0;i<45000;i++)

{

x=(rand()%1001)/1000.0;//将生成的0-1000的随机数除以1000便是精度为0.001的0-1之间的随机数.

sum+=pow(e,x*x);//求45000个f(Xi)的和的值,再除以45000就是f(Xi)的平均值.

}

printf("%d次随机试验的f(Xi)的平均值=%f\n",i,sum/45000);

return0;

}

程序运行结果如下:

所以

≈1.461591.

2.用C语言编写程序。

用随机数函数模拟45000次,得到45000个0~1之间的随机数Xi,将这些数的

求和后再取平均值,就是所要求的

的值。

程序代码:

#include

#include

#include

#include"math.h"

intmain()

{

inti;

doublex,sum=0;

srand((unsigned)time(0));

for(i=0;i<45000;i++)

{

x=(rand()%1001)/1000.0;

if(x==0)//此处防止生成的随机数太小接近于0,下一步求f(Xi)时发生除以0的错误.

x=0.0000001;

sum+=sin(x)/x;

}

printf("%d次随机试验的f(Xi)的平均值=%f\n",i,sum/45000);

}程序运行结果如下:

所以

≈0.946260.

三、假设男、女婴的出生率均为0.5,每个家庭只要有一个男婴出生就不再生下一胎,如果没有男婴,不论已经出生多少女婴,都可以继续要下一胎。

假设某地有100万个家庭,按照上述生育政策,自行编制程序回答以下问题:

1.每个家庭大约有几个小孩?

2.男女比例大约为多少?

3.如果男婴与女婴的出生率为0.51与0.49,重新回答前两问。

解:

1.第k胎为男孩的概率P=

所以每个家庭孩子数目的期望EX=

.由于

=1.56×10-28已经很小,后面的还会越来越小,所以只需要计算前100项就可以近似地代替

.用C语言计算EX=

的值,程序代码如下:

#include"stdio.h"

#include"math.h"

intmain()

{

intk;

doublem=0.5,EX=0;

for(k=1;k<=100;k++)

{

EX+=k*pow(m,k);

}

printf("EX=%f\n",EX);

}

程序运行结果如下:

可见EX=2.即每个家庭大约有2个孩子。

2.每个家庭男孩数的期望EX1=

女孩数的期望EX2=

(100万个家庭的男、女孩数分别就是106×EX1、106×EX2).同

(1)中的级数一样,这两个级数计算前100项即可近似地代替所有项.用C语言编写程序,代码如下:

#include"stdio.h"

#include"math.h"

intmain()

{

intk;

doublem=0.5,EX1=0,EX2=0,sum1,sum2;

for(k=1;k<=100;k++)

{

EX1+=pow(m,k);

EX2+=(k-1)*pow(m,k);

}

sum1=1000000*EX1;//sum1是男孩总数

sum2=1000000*EX2;//sum2是女孩总数

printf("男女比例=%f\n",sum1/sum2);

}

程序运行结果如下:

由此可知男女比例=1:

1.

3.

(1)第k胎为男孩的概率P=

每个家庭孩子数目的期望EX=

.下面用C语言计算EX=

,程序代码:

#include"stdio.h"

#include"math.h"

intmain()

{

intk;

doublem=0.51,n=0.49,EX=0;

for(k=1;k<=100;k++)

{

EX+=k*m*pow(n,k-1);

}

printf("EX=%f\n",EX);

}

运行结果如下:

所以此时每个家庭的孩子数约为1.960784.

(2)EX1=

;EX2=

.

用C语言求男孩总数和女孩总数,再求男女比例,程序代码如下:

#include"stdio.h"

#include"math.h"

intmain()

{

intk;

doublem=0.51,n=0.49,EX1=0,EX2=0,sum1,sum2;

for(k=1;k<=100;k++)

{

EX1+=m*pow(n,k-1);

EX2+=(k-1)*m*pow(n,k-1);

}

sum1=1000000*EX1;//sum1是男孩总数

sum2=1000000*EX2;//sum2是女孩总数

printf("男女比例=%f\n",sum1/sum2);

}

程序的运行结果如下:

所以此时的男女比例=1.040816

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1