计算 π 的方法一、蒙特卡罗法(Monte Carlo)蒙特卡洛方法是一种以概率统计理论为指导的一类非常重要的数值计算方法。蒙特卡罗是摩纳哥公国的一座城市(赌城)。Buffon 投针就是蒙特卡洛方法的思想,但是 Buffon 是蒙特卡洛方法的起源。蒙特卡洛方法同样可以通过随机通过产生随机数的方式来解决计算问题。比如估算和计算不规则图形的面积。图 1 蒙特卡罗方法模拟这种方法是一种利用计算机随机数的功能基于“随机数” 的算法, 通过计算落在单位圆内的点与落在正方形内的点的比值求PI。图 2 蒙特卡罗方法由于图形的对称性,我们靠考虑该图的四分之一部分。假定一点能够均匀地扔到一个正方形中, 计算落入其中的点个数。 通过计数其中落入内切圆的点的个数;如果一共投入 N个点,其中有 M个落入圆中, 则只要点均匀, 假定圆周的半径为 R,则:式( 1)该方法得到的要得到 π 的精度与投入点的个数有关, 一般个数较大时精度比较高。//Monte Carlo Methoddoublerand_pi ( intn) {intnumInCircle= 0;double x, y;double pi ;for( inti= 0; i< n; i ++){x = rand ()*1.0/RAND_MAX;y = rand ()*1.0/RAND_MAX;if( x * x + y * y < 1)numInCircle ++;}pi = ( 4.0 * numInCircle ) /n;returnpi ;}图 3 蒙特卡罗示例代码写出来你的代码实际测试结果(10 Marks )表 1 蒙特卡罗方法实际测试结果次数10 102103104105106107108109计算值运行时间(ms)误差二、数学公式(级数)由数学公式: ? 式( 2)当 n 取 1000 时就很接近//Numerical Series//Sigma(1/n^2) = pi/6doublemath_Pi( intn) {intnumInCircle= 0;double sum = 0;double pi ;for( inti= 1; i<= n; i ++){sum += 1.0 / ((double)i *i );}pi = sqrt ( sum * 6);returnpi ;}图 4 级数方法示例代码写出来你的代码实际测试结果(10 Marks )表 2 级数方法实际测试结果次数10 102103104105106107108109计算值运行时间(ms)误差三、划分网格计算π图 5 蒙特卡罗示例代码将图片分为 n*n 个小方形, 统计落在圆内的个数占所有方形的比例。//Grid Countdoublegrid_Pi ( intn) {inti ;double sum = 0;for( i= 0;i< n;i ++)sum += ( int ) sqrt ( n*( double ) n -i *( double ) i );return( 4.0* sum)/n / n;}图 6 网格划分示例代码写出来你...