Python用积分思想计算圆周率

[文本出自天外归云的博客园]

早上起来突然想求圆周率,1单位时圆的面积。

代码如下:

from math import pow, sqrt

def calc_circle_s_with(r, dy, x_slices):
    x_from_start_to_cc = sqrt(1 - pow(dy, 2))
    dx = x_from_start_to_cc / x_slices
    x_to_edge = 1 - x_from_start_to_cc
    quarter_circle_s = 0
    while x_to_edge < 1:
        rect_s = dy * dx
        quarter_circle_s += rect_s
        x_to_edge = x_to_edge + dx
        dy = sqrt(1 - pow((1 - x_to_edge), 2))
    circle_s = 4 * quarter_circle_s
    print(circle_s)

calc_circle_s_with(1, 0.0001, 10000000)

运行结果接近3.1415926,dy传的越小,x_slices传的越大,就越接近。

半径为:1

初始小矩形到圆周的距离:1 - x_from_start_to_cc

其中dy代表四分之一圆中初始小矩形的高度,x_slices代表小矩形的宽度:(1 - x_from_start_to_cc) / x_slices

四分之一圆的面积积分为:quarter_circle_s

原文地址:https://www.cnblogs.com/LanTianYou/p/12008228.html

时间: 2024-11-06 09:15:16

Python用积分思想计算圆周率的相关文章

蒙特卡洛方法计算圆周率的三种实现-MPI openmp pthread

蒙特卡洛方法实现计算圆周率的方法比较简单,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正中央,标靶的长和宽都是2 英尺.同时假设有一个圆与标靶内切.圆的半径是1英尺,面积是π平方英尺.如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式 飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4 因为环包含的面积与正方形面积的比值是π/4. 因为环所包含的面积与正方形面积的比值是π/4. 我们可以用这个公式和随机数产生器来估计π的值. 伪代码如下: numb

python 下的crc16计算模块 XCRC16

又一次突然遇到用python处理modbus通信而需要crc16校验的问题,当时在百度上没找到,在google上找到了一个外国人开发的python包,结果安装好了之后发现校验的不正确(可能是使用的模式串不一样,xcrc16的模式串为0xa001),后来事情过去了就写了一个包弥补一下,xcrc16 的意思是 extend crc->xcrc ,也是我的第一个开源项目,如果大家使用程序遇到什么情况也麻烦通知我下,我会第一时间进行维护. 介绍: xcrc16 模块是为了解决crc16校验问题而写 目前

Python中的简单计算

Python中的简单计算 (1)基本的加减乘除 >>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5  1.6 (2)除法总是会返回一个浮点数,想要返回整数,需要用"//"来表示(floor division),另外,可以用"%"进行取余操作 >>> 17 / 3  # classic division ret

循环-02. 计算圆周率(15)

循环-02. 计算圆周率(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆(浙江大学城市学院) 根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值. 输入格式: 输入在一行中给出小于1的阈值. 输出格式: 在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位. 输入样例: 0.01 输出样例: 3.132157 1 #include<stdio.h> 2 #include<stdlib.h>

python 在调用时计算默认值

大家都知道python的默认值是在函数定义时计算出来的, 也就是说默认值只会计算一次, 之后函数调用时, 如果参数没有给出,同一个值会赋值给变量, 这会导致, 如果我们想要一个list默认值, 新手通常这么写: def foo(a=[]): a.append(3) print a 其实是错误的,两次调用会这样的结果: [3] [3, 3] 其实应该这么写 def baz(a=None): a = a or [] a.append(3) print a 两次调用输出以下结果: [3] [3] 这样

计算圆周率的C程序

这是很早以前用C语言写的一个计算圆周率的程序,  算法是用泰勒公式计算反正切值.在命令行不跟参数执行该程序则使用Gauss公式计算前1000位圆周率的值,如果带一个命令行参数,则该值为要计算的位数.如果还有第二个命令行参数,则使用Stomer公式计算,可作为验算.因为该程序只涉及到纯数学计算,可以在Linux.Unix.Windows等操作系统下编译并运行.当时写这个程序时,int是2个字节的,现在大多数的C编译器int都是4个字节,不过这不影响程序的正确性. #include <stdio.h

蒙特卡罗方法计算圆周率

蒙特卡罗方法计算圆周率 前几天读到了一篇网志:蒙特卡罗方法入门,http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html 其中介绍了用概率计算圆周率的方法,所以就用程序做了以下尝试. 作为常量的PI值的近似在Math.PI中为3.141592653589793. Ⅰ.方形中的所有像素计算 package yumu.probability.montecarlo; public class CalculatePI { private

计算圆周率

Digits of Pi: In this problem you have to find as many digits of PI as possible. Output: Output must contain as many digits of PI as possible (not more than 1,000,000). Score: The score awarded to your program will be the first position of the digit

c语言学习之不同方式计算圆周率

 /*************************************************** * 功能: *        通过概率法和切割法计算圆周率 * 说明: *        概率法需要输入圆没的点数 *        切割法需要输入切割的次数 ***************************************************/ #include <stdio.h> #include <time.h> #include <stdl