Chinaunix首页 | 论坛 | 博客
  • 博客访问: 466624
  • 博文数量: 65
  • 博客积分: 2645
  • 博客等级: 少校
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-08 17:04
文章分类

全部博文(65)

文章存档

2010年(5)

2009年(5)

2008年(14)

2007年(35)

2006年(6)

分类:

2006-05-16 11:17:35

...这是我2005年12的课程设计中程序的核心部分,写完后自己非常得意,等着老师表扬。等啊等,等待现在也没等到  :-D
现将它献给大家...(若有版权那遵守BSD吧 :-))
注1:程序以前是用Matlab写的现用Java重写
注2:原程序中 galton返回值为 int[] grid 、没有“输出结果”部分

public void galton(int sumOfGrid, int sumOfBall){
    int[] grid = new int[sumOfGrid];
                
    int number = 0; //一个小球从顶端落下过程中向右偏移的总次数
    int  rand ; //随机数,取值范围为{0,1},为0、为1的概率相等        
                
    for( int counter_ball = 1;

             counter_ball <= sumOfBall;  

             counter_ball++ ){
                        
    //<核心> 
    // (sumOfGrid - 1)为钉板的层数
    for( int times = 1;

             times <= ( sumOfGrid - 1 );

             times++ ){
          rand = (int)( Math.random()*2 );
          number += rand;
     }
                        
     grid[number]++;
     number = 0;
     //
     }
                
     //输出结果
     System.out.println( "小球的总数为"+sumOfBall+

                       "\t格子的个数为"+sumOfGrid );
                
     for( int index = 0; index < grid.length;

              index++ ){
        System.out.println( (index+1)+

              "号格子中的小球数为:\t"+grid[index] );
        }


}//end of metod galton


 

2008-08-07 用 python 实现

 
 

def galton(sumOfGrid, sumOfBall):
    """

    @author: libin

    @param sumOfGrid: 格子的数量
    @type sumOfGrid: int
    @param sumOfBall: 投入的小球总数
    @type sumOfBall: int
    @return: 每个格子中小球的数量
    @rtype: list
    "
""

    #将每个格子中小球数清为0
    g = [0 for i in range(sumOfGrid)]
    
    #计算钉子的层数
    b = sumOfGrid - 1
    
    #计算模型
    for t in range(sumOfBall):
        #获取一个随机向量 a. sum(a) 为小球的偏移量
        a = [random.choice([0,1]) for i in range(b)]
        
        #偏移量为0的小球落入0号格子, 为1的落入1号格子 ...
        g[sum(a)] += 1

    #返回每个格子中小球数
    return g


运行结果:
    格子数量:      5
    投入的小球数:  1000000  (1百万)
    耗时:         11.7970001698 秒
    计算结果:      [62272, 249918, 374495, 250441, 62874]

    格子数量:      5
    投入的小球数:  10000000 (1千万)
    耗时:         115.937999964 秒
    计算结果:     [624722, 2501694, 3750013, 2499684, 623887]



阅读(9435) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-15 19:41:17

可以用mathematica语言写一下吗??谢谢!!!!