当前位置: 代码迷 >> 综合 >> 编程模拟高尔顿钉板(正态分布)C++
  详细解决方案

编程模拟高尔顿钉板(正态分布)C++

热度:37   发布时间:2024-02-07 15:17:10.0

实验原理:


从入口处放进一个直径略小于两颗钉子之间的距离的小圆玻璃球,当小圆球向下降落过程中,碰到钉子后皆以1/2的概率向左或向右滚下,于是又碰到下一层钉子。如此继续下去,直到滚到底板的一个格子内为止。把许许多多同样大小的小球不断从入口处放下,只要球的数目相当大,它们在底板将堆成近似于正态 的密度函数图形(即:中间高,两头低,呈左右对称的古钟型),其中n为钉子的层数。
在这里插入图片描述
在这里插入图片描述

代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h> //时间种子
#define M 100000 //实验次数
#define N 30 //层数
#define R 100 //缩放比例 
void print(int a[N]);  //画出正态分布图int main()
{printf("模拟实验次数为%d,层数为%d\n",M,N);srand((int)time(NULL));int i,j,k,x;int a[N+1]={0};for(i=0;i<M;i++)   //模拟次数{k=0;for(j=1;j<=N;j++)  // 层数{x=rand()%2;if(x==1)k++;}a[k]++;}for(i=0;i<=N;i++)printf("%d:%d ",i,a[i]);printf("\n");print(a);getchar();return 0;
}
void print(int a[N+1])
{int i,j;printf("缩放比例为1:%d\n",R); for(i=0;i<N+1;i++){printf("%d",i);for(j=1;j<=a[i]/R;j++)printf("#");printf("\n");}
}

运行结果

在这里插入图片描述
实验次数和缩放比例可以自己调整

实验结果

预想
和正态分布的分布趋势相同。