• Geek_Mike
    2023-07-13 来自云南
    # 编写一个函数,计算 PI 的近似值。函数的参数越大,PI 的值越精确。 import math def Pi(x:int): pi = math.acos(-1) print(f'{pi:.{x}f}') Pi(20)

    作者回复: 不错!! 你提供的代码使用了反余弦函数来计算 \(\pi\) 的值,这是一种可行的方法。不过,如果你想通过增加参数来提高精确度,可以考虑使用一种数值方法,例如蒙特卡洛方法或者利用数学公式,例如Leibniz公式。 下面是使用Leibniz公式计算 \(\pi\) 的一个示例: \[ \pi = 4 \times \left(1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \ldots\right) \] 代码如下: ```python def Pi(terms: int): pi = 0 for i in range(terms): pi += ((-1) ** i) / (2 * i + 1) pi *= 4 return pi # 测试函数 terms = 1000000 approximate_pi = Pi(terms) print(f"Approximate value of PI with {terms} terms: {approximate_pi}") ``` 此代码中的 `terms` 参数控制了近似计算中使用的项数。项数越多,近似值就越精确。例如,当 `terms` 为 \(1000000\) 时,你会得到一个相当精确的 \(\pi\) 值。 你可以根据需要调整 `terms` 的值来获得所需的精确度。

    共 2 条评论
    
  • yanyu-xin
    2023-02-01 来自广东
    import random def pi_cal(num_halt = 1000000 ): """计算PI值。 参数:num_halt = 1000000 精度(循环次数)初始值 蒙特卡洛法计算圆周率。设想一个正方形,边长a=2,则其内接圆的半径r=1,则圆和正方形的面积比是:Sy/Sz = PI*r*r/a*a = PI/4。 由此:PI = 4*Sy/Sz。 蒙特卡洛法来获得面积比Sy/Sz:让计算机产生很多的随机点(x,y),其中x、y都是[0,1]之间的随机数, 可以用判断(X*X + Y*Y) 是否小于1的方法来确定是否在圆内,则圆内的点数代表圆面积,总点数代表总面积,两者相除就是面积比Sy/Sz。""" num_cir = 0 #随机点在圆内的计数器 for i in range(num_halt): x = random.random() #获得随机点的横坐标 y = random.random() #获得随机点的纵坐标 if x*x + y*y < 1 : #随机点(x,y)在圆内 num_cir = num_cir + 1 #圆内计数器+1 pi = 4*num_cir/num_halt print(num_halt," ", pi) print("\n实验次数 计算结果") pi_cal() pi_cal(5000000) pi_cal(10000000) pi_cal(50000000)
    展开
    
    3
  • Matthew
    2022-12-14 来自江苏
    import random # 蒙特卡洛方法 def cal_pi(n:int) -> float: count = 0 for i in range(int(n)): x = random.random() y = random.random() d = (x - 0.5) ** 2 + (y - 0.5) ** 2 if d <= 0.5 ** 2: count+=1 else: pass return (4*count)/n # 测试验证 n = input("请输入:") print(f"PI的近似值为:{cal_pi(int(n))}")
    共 1 条评论
    2
  • 江江儿嘛哩哄
    2023-01-04 来自浙江
    #蒙特卡洛模拟 import random n = input("请输入参数:") hits = 0 for i in range(int(n)): x, y = random.random(), random.random() dist = (x**2 + y**2)**0.5 if dist <= 1.0: hits = hits + 1 pi = (4 * hits) / int(n) print(f"圆周率是:{pi}")
    
    1
  • 不再是入门水平pytho...
    2023-09-02 来自上海
    # 计算pi的近似值 import random def aproximate_pi(n): """ 使用蒙特卡罗方法估计pi的值。 参数: n -- 投掷点的数量 返回: pi的近似值 """ inside_circle = 0 for _ in range(n): x,y = random.random(),random.random() if x**2 + y**2 <= 1: inside_circle += 1 return (inside_circle / n) * 4
    
    
  • Greenery
    2023-07-18
    def get_pi(n: int) -> float: pi = 0 for i in range(1, n + 1): pi += 1 / i ** 2 return pi import math for i in range(1, 10000): myPi = math.sqrt(get_pi(i) * 6) print("my pi is", myPi, ", diff=", abs(myPi - math.pi))
    
    
  • ラ キチ
    2023-06-07 来自上海
    def calculate_pi(n): pi = 0 sign = 1 for i in range(1, n * 2, 2): pi += sign * (1 / i) sign *= -1 return pi * 4 print(calculate_pi(10000000))
    
    
  • Geek_943787
    2023-05-20 来自浙江
    def euler_pi(n): # n is the number of terms in the series s = 0 # initialize the sum for i in range(1, n+1): s += 1 / i**2 # add the i-th term to the sum pi = (6 * s)**0.5 # calculate pi from the sum return pi # return the result print(euler_pi(300)) print(euler_pi(30000)) def euler_pi(n): # n is the number of terms in the series s = 0 # initialize the sum for i in range(n+1): s += (1 / 16**i) * (4 / (8*i+1) - 2 / (8*i+4) - 1 / (8*i+5) - 1 / (8*i+6)) # add the i-th term to the sum pi = s # calculate pi from the sum return pi # return the result print(euler_pi(30)) print(euler_pi(30000))
    展开
    共 1 条评论
    
  • titanium
    2023-05-10 来自美国
    import random def monte_carlo_pi(n): start = 0 for i in range(n): x = random.uniform(-1, 1) y = random.uniform(-1, 1) if x ** 2 + y ** 2 <= 1: start += 1 return start * 4 / n print(monte_carlo_pi(100000000))
    
    
  • sunny
    2023-02-10 来自江苏
    #请你编写一个函数,计算 PI 的近似值。函数的参数越大,PI 的值越精确。 import random # 传入需要生成的点的数量,点数量越多,pi值越精确 def monte_carlo_method(point_count): # 在 1x1 的正方形内随机生成 point_count 数量的点 point_list = [(random.random(), random.random()) for i in range(point_count)] count = 0 # 遍历计算这些点落在 1x1 正方形内切圆内的数量 for x, y in point_list: # 求随机点到圆心到距离 distance = ((x - 0.5) ** 2 + (y - 0.5) ** 2) ** 0.5 # 如果距离小于 0.5,数量加1 if distance < 0.5: count += 1 # count/point_count = pi / 4, 求pi pi = count / point_count * 4 return pi print(f'pi = {monte_carlo_method(1000000)}')
    
    