python用泰勒级数计算圆周率 |
您所在的位置:网站首页 › 泰勒级数求圆周率 › python用泰勒级数计算圆周率 |
我想使用泰勒级数计算平方根.我只是在学习该系列,我写了一些代码,但我不知道为什么它不起作用,也许我不应该喂它?请谁能向我解释我在做什么错? from math import sqrt def factorial(n): result = 1 for i in range(2, n+1): result *= i return result def binomical(alpha, n): result = 1 for i in range(0, n): result *= (alpha - i) return result / factorial(n) for i in range(1, 10): x = sum(binomical(0.5, k) * i ** k for k in range(10)) print x, sqrt(i) 解决方法: 有两个问题,一个是次要,一个是主要.较小之处在于扩展是以(1 x)^ alpha而不是x ^ alpha的形式编写的,因此您的i ** k实际上应该是(i-1)** k.这样做会使您的输出 1.41920471191 1.0 5.234375 1.41421356237 在这里您可以看到关闭sqrt(1)的答案是如何将sqrt(2)变成 1.0 1.0 1.41920471191 1.41421356237 更好.不幸的是,其余条款仍然不是很好: 5.234375 1.73205080757 155.677841187 2.0 2205.0 2.2360679775 17202.2201691 2.44948974278 91687.28125 2.64575131106 376029.066696 2.82842712475 1273853.0 3.0 并将术语总数从10增加到100会使情况变得更糟: 1.0 1.0 1.4143562059 1.41421356237 1.2085299569e+26 1.73205080757 3.68973817323e+43 2.0 9.21065601505e+55 2.2360679775 3.76991761647e+65 2.44948974278 2.67712017747e+73 2.64575131106 1.16004174256e+80 2.82842712475 6.49543428975e+85 3.0 但这是可以预料的,因为正如您所链接的页面所解释的,只有在x的绝对值小于1时,才能保证收敛.因此,我们可以很好地得出小数的根: >>> i = 0.7 >>> sum(binomical(0.5, k) * (i-1) ** k for k in range(10)) 0.8366601005565644 >>> i**0.5 0.8366600265340756 我们可以尝试缩小比例以处理其他数字: >>> i0 = 123.0 >>> i = i0/(20**2) >>> sum(binomical(0.5, k) * (i-1) ** k for k in range(50)) 0.5545268253462641 >>> _*20 11.090536506925282 >>> i0**0.5 11.090536506409418 或采用泰勒级数围绕不同的点,等等. 总的来说,泰勒级数为radius of convergence-可能为零! -他们给出正确的结果. Wikipedia Taylor系列页面上有一个有关“近似和收敛”的部分. (P.S.“二项式”中没有“ c”.:^) 标签:square-root,python,math |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |