如何修复Gregory-Liebniz方程中的Python错误?

如何修复Gregory-Liebniz方程中的Python错误?,python,math,syntax-error,Python,Math,Syntax Error,for循环中有缩进,无法使其显示。我在pi=pi出现语法错误。。。线路。什么是解决这个问题的好方法?我只是在学习Python,并不完全确定我是否使用了正确的语法。非常感谢你 尝试使用以下代码: n = 10 pi =0 for i in n: pi = pi + (4i - (1**i))/(2i+1) print(pi) 以下是实际公式: n = 10 pi = 0 for i in range(n): # replaced 'n' with range(n)

for循环中有缩进,无法使其显示。我在pi=pi出现语法错误。。。线路。什么是解决这个问题的好方法?我只是在学习Python,并不完全确定我是否使用了正确的语法。非常感谢你

尝试使用以下代码:

n = 10  
pi =0

for i in n:  
    pi = pi + (4i - (1**i))/(2i+1)

print(pi)

以下是实际公式:

n = 10  
pi = 0

for i in range(n): # replaced 'n' with range(n)  
    pi += (4*i - ((-1)**i))/(2*i+1)  # a = a + b, is same as: a += b
    #              ^ Correction as per Gregory–Leibniz formula    
    # for multiplication, you need to explicitly mention `*` operator
    # replaced '4i' and '2i' with '4*i' and '2*i'

print(pi)
公式返回
pi/4
,这就是
*4
部分的原因


另外,
1**i
总是导致
1
,您实际上需要
(-1)**i

除了
4i
2i
的语法错误之外,您还没有正确实现pi的Gregory–Leibniz公式。这是一个修复过的版本

n = 1000 # Raise the number of iterations to get a better approximation
pi = 0.0

for i in range(n):
    pi += (-1)**i/(2.0*i + 1) # You have to use the .0 in python 2.x

print(pi * 4)
输出

n = 50000
pi = 0
for i in range(n):
    pi += 4 * (-1)**i / (2*i + 1)

print(pi)
def arc_cot(n, lim=1E-15):
    ''' Inverse cotangent of n '''
    x = 1.0 / n
    y = -x * x
    a = x
    i = 1
    while True:
        i += 2
        x *= y
        t = x / i
        a += t
        if abs(t) < lim:
            break
    return a

a = arc_cot(2) + arc_cot(3) 
print(4 * a)

a = 4 * arc_cot(5) - arc_cot(239) 
print(4 * a)
然而,
(-1)**i
是一种非常浪费的计算每个术语符号变化的方法。这里有一个更好的方法。将乘法从循环中移出4,并将
范围
设置为只提供奇数,这也更有效

3.1415726535897814

Gregory–Leibniz公式计算
pi=4*arctan(1)
。通过使用基于小于1的数字的反正切关系,可以加快收敛速度。例如

n = 50000
pi = 0
s = 1
for i in range(1, 2*n, 2):
    pi += s / i
    s = -s
pi *= 4

print(pi)

由于
arctan(1/n)==arccot(n)


有关这些arccot公式推导的信息,请参见和。

4i
2i
替换为
4*i
2*i
对于n中的i:
替换为
对于范围(n)中的i:
您还期望
1**i
做什么?因为这将
1
提升到
i
的幂,这将始终导致
1
。顺便说一句,这不是pi的Gregory–Leibniz公式。另外,实际的格雷戈里-莱布尼茨公式是已知计算圆周率的最慢的方法之一。@Stacey:如果有帮助,请其他人将来参考相同的问题。
arctan(1) = 4 * arctan(1/5) - arctan(1/239) 
def arc_cot(n, lim=1E-15):
    ''' Inverse cotangent of n '''
    x = 1.0 / n
    y = -x * x
    a = x
    i = 1
    while True:
        i += 2
        x *= y
        t = x / i
        a += t
        if abs(t) < lim:
            break
    return a

a = arc_cot(2) + arc_cot(3) 
print(4 * a)

a = 4 * arc_cot(5) - arc_cot(239) 
print(4 * a)
3.141592653589793
3.141592653589794