- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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/
我需要对反正切值执行泰勒级数 50 次。表示 arctan Taylor 级数的域之间的 50 个数字,即 [-1,1]。我已经用手动用户输入对其进行了测试并且它工作正常,但是我在代码中递增 0.01
我在网上看了几个小时,想看看我是否能找到解决方案,虽然我已经找到了很多解决方案,但我教授的指示如下: Write a program to estimate PI (π) using the foll
我最近在编程测试中被问到这个问题。我似乎无法理解为什么我会得到答案“1”。我是 C 编程语言的初学者。 这是我的代码: #include int main() { float c = 0;
我是一名优秀的程序员,十分优秀!