gpt4 book ai didi

python - 尝试将 pi 计算为 7s.f。使用 arctan(x) 的泰勒级数近似的结果。与 while 循环作斗争

转载 作者:行者123 更新时间:2023-12-01 02:25:38 25 4
gpt4 key购买 nike

我对 Python 完全陌生,并且在完成部分作业时遇到了一些问题。

首先,我们必须定义一个使用泰勒级数展开来近似 arctan(x) 的函数。

现在,我必须利用 arctan(1) = pi/4 这一事实,使用我的函数将 pi 计算为 7sf,并找到此精度级别所需的迭代次数 N。

这是我的泰勒展开式代码(条件语句用于作业的另一部分):

import math as mt


def TaylorExp (x,N):
if abs(x) <=1:
n=0.0
total = 0.0
while (n<N): #performs N iterations.
c = (((-1)**n)/((2*n)+1))*(x**((2*n)+1))
total += c
n += 1
return total

这是我尝试将 pi 计算为 7sf 并找到所需 N 的代码:

i=0
z = 0
k=0
while ((format(k,'.6f'))!= (format(mt.pi,'.6f'))):
z = TaylorExp(1,i)
i += 1
k= z*4
print ('The value for pi found from arctan (1) is', format(k,'.6f'),' which is accurate to 7sf.')
print ('The number of iterations N required is: ',i, format(mt.pi, '.6f'))

它的工作速度很快,最多可达小数点后 3 位,但 4dp 需要几分钟,5 和 6 dp 需要几小时/天。我知道这是一种非常低效的方法,但是花了相当长的时间尝试不同的 while 循环等,我无法使用我的 TaylorExp 函数找到更快的方法,因此我们将不胜感激。

最佳答案

您的代码需要 O(n^2) 时间,第一次进行 1 次迭代,第二次进行 2 次迭代,依此类推。

您可以更改 TaylorExp 函数以返回一个生成器,该生成器按顺序生成该系列的每个步骤:

def TaylorExp(x):
total = 0.0
n = 0.0
while True:
c = (((-1)**n)/((2*n)+1))*(x**((2*n)+1))
n += 1
total += c
yield total

然后像这样使用它:

i = 0
k = 0.0

for z in TaylorExp(1):
k = z * 4
if format(k, '.6f') == format(math.pi, '.6f'):
break
i += 1

print ('The value for pi found from arctan (1) is', format(k, '.6f'),' which is accurate to 7sf.')
print ('The number of iterations N required is: ', i, format(math.pi, '.6f'))

在我的计算机上,此代码大约需要 5 秒,并打印:

The value for pi found from arctan (1) is 3.141593  which is accurate to 7sf.
The number of iterations N required is: 1181460 3.141593

关于python - 尝试将 pi 计算为 7s.f。使用 arctan(x) 的泰勒级数近似的结果。与 while 循环作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47438901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com