【问题标题】:Square root using Taylor series使用泰勒级数的平方根
【发布时间】:2013-01-10 08:37:20
【问题描述】:

我想使用泰勒级数计算平方根。我只是在学习这个系列,我写了一些代码,但我不知道为什么它不起作用,也许我不应该把 i 喂给它?请任何人向我解释我做错了什么?

我有来自http://en.wikipedia.org/wiki/Taylor_series#List_of_Maclaurin_series_of_some_common_functions的公式

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)    

【问题讨论】:

  • 它是python,你应该把它标记为python
  • 关于你想拍泰勒系列的哪一点?如果您认为x=0 它没有定义。
  • 令人惊讶的是,远离x=1 的误差会随着考虑的项越多而变大。
  • @ja72: 大约 1 到 10,也就是我想计算 10 个平方根并将它们与标准函数进行比较。

标签: python math square-root


【解决方案1】:

有两个问题,一个小问题,一个大问题。次要的是扩展是用(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——可能为零! ——在其中他们给出了正确的结果。维基百科泰勒系列页面有一个关于“近似和收敛”的部分,其中涵盖了这一点。

(P.S. “二项式”中没有“c”。:^)

【讨论】:

  • 非常感谢您的详细解答!
猜你喜欢
  • 2012-02-07
  • 2014-04-03
  • 2021-08-12
  • 2021-08-13
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 2014-02-23
相关资源
最近更新 更多