繁体   English   中英

我在 Wallis 产品上的 python 代码有什么问题?

[英]What is wrong with my python code on Wallis product?

所以,我被要求编写 Wallis 产品的代码,它本不应该很复杂。 所以我做了一个代码,但显然,它只适用于Wallis(1)而不是其他的。 有人可以帮助我吗? 谢谢!

def Wallis (n):
    result = 1
    for count in range(2, n+2, 2):
        result = result * (count**2/((count-1)*(count+1)))
    return result

计算 Wallis 乘积的公式

(2*2)/(3*5) * (4*4)/(5*7) * (6*6)/(7*9) and so on until ((n*2) ** 2)/ ((n-1)* (n+1))

输出

Wallis(1) = (2*2)/(3*5) = 0.267
Wallis(2) = Wallis(1) * (4*4)/(5*7) = 0.122

主要是你的 range 命令是错误的:

range(2, 2*n+2, 2)

或者,您可以将复杂性移至公式,即:

for count in range(1, n):
    result = result * (4*count*count/((2*count-1)*(2*count+1)))

您的代码的问题在于,在等式中count等于2*n ,因此在(count**2/((count-1)*(count+1)))count**2(2*n)**2但是以下count-1应该与n-1相同,但实际上是(2*n)-1 count+1

我制作了自己的版本,应该可以帮助你(虽然我使用了一个不同的方程式,它位于https://www.wikiwand.com/en/Wallis_product

def wallis(limit):
    result = 1
    for x in range(2, limit, 2):
        result *= (x / (x - 1)) * (x / (x + 1))
    return result

随着limit变得更高,它会收敛到接近 pi 的一半。

正如其他人所说,您的range()需要更改。

对于 n=3,

for count in range(2, n+2, 2):
    print(i)

会打印

2
4

但你也需要6

正如 Python 文档所说

class range(start, stop[, step]) 

对于正步,范围 r 的内容由公式 r[i] = start + step*i 确定,其中 i >= 0 且 r[i] < stop。

意思是不包括stop

这里的step2 ,你可以使用

for count in range(2, 2*(n+1), 2):

求幂比乘法更昂贵。 所以

count*count

count**2

所以修改后的版本可能是

def Wallis(n):
    result=1
    for count in range(2, 2*(n+1), 2):
        result*=((count*count)/((count-1)*(count+1)))
    return result

注意Wallis返回的值只是 Pi 值的一半。

您可以将return语句修改为

return result*2

如果你想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM