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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值