MATLAB 学习历程之for循环计算圆周率

圆周率\pi的各种计算方法,这里介绍以下三种,都是在MATLAB 上通过相关算法实现的。

(1)利用无穷级数展开式求π 的近似值。


这是求n个数之和的累加问题,可用以下递推式来描述:        

  可用以下赋值语句来实现。

其中累加项f的符号可用以下赋值语句来实现(每循环一次反号一次)。

累加项f就可用以下赋值语句来实现。 

最上面‘n=?’只是单纯表示n的值可以取无限大,\pi值是在这个无穷级数取值无穷大的情况下实现的

其中语句  n=input('n=?');完全可以自己输入一个无穷大的值,当然若取值(n=1000),得到的π值可能不是很精确(3.1406)

若(n=100000)得到的π值可能相对精确一点儿(3.1416),对应牺牲的是在MATLAB中运行的时间可能相对长一点,毕竟for循环执行了100000次,耗时较久,占用一定内存。

累加项符号初值为1,输入n的值,每一次计算先求累加项符号,再将累加项累加到y中

用向量求和的方式实现程序

x值为分母,1,3,5,7,.......2*n-1,奇数项作为分母

输出y值中添加符号变换一选项,利用点乘.^和./点除方式表示他是正负相间的进行相关运算 ,确保运算不会出现相关错误,y值求得是π/4的值,故而将所求的y值乘以4 得到相关π值。

第二种方法:利用定积分的近似值球π的近似值。

左图是利用定积分求解π值的图像形象表示,起始点a=0,(默认设置),终点b=1

将其等效为n个小的梯形求其面积累加得到π/4的值

中间绿色图形程序解释如下

h为高,等效为b-a的长度除以n(因为分成n等份)

f是关于1-x*x的开方,是的某种形象表示,1/4单位圆的面积

s=[]空矩阵,用来 存放每次计算小梯形的面积s1,成为一个行矩阵

for循环n次 

s1是计算每个小梯形面积的公式,将每个s1 面积放到矩阵s中,

最右侧是根据此思想写的一个程序,但是我们可以看到

同样是循环1000,次,但是他的精度与此前无穷级数的精度不一样,这是因为选择的方法不一样。

前者是公式累计,后者是定积分近似

第三种方法:利用蒙特卡洛法求π 的近似值。 

这个主要利用了概率学,p=圆的面积/矩形的面积=π*r^2/2*2=π/4

只考虑在第一象限内的图像,随机点占的比例,

主要是点随机分布在1/4圆内和随机点在1/4正方形的比值。

            

注意是两个end,一个对应if 另外一个对应for语句

有上图可以看到,n的次数选取对最后估计值的精度有很大影响,虽然中间n=1000000,但是他的运行时间较n=100000长得多,类比有n值越大,他的及精确度越高。

猜你喜欢

转载自blog.csdn.net/wang18726871687/article/details/81095100
今日推荐