泰勒级数求平方根

3
我想使用泰勒级数计算平方根。我正在学习这个级数,并写了一些代码,但不知道为什么它不能正常工作,也许我不应该将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。 - John Alexiou
你想要在哪个点上进行泰勒级数展开?如果你选择在 x=0 处展开,那么它是没有定义的。 - John Alexiou
令人惊讶的是,远离 x=1 的误差随着考虑的项数增加而变得更大。 - John Alexiou
@ja72:大约需要计算1到10的平方根,并将它们与标准函数进行比较。 - Tuom L.
1个回答

4

有两个问题,一个是小问题,一个是大问题。小问题是扩展式子是用(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

或者以不同的点为中心进行泰勒级数展开等等。总的来说,泰勒级数有一个收敛半径——可能是零!在这个范围内,它们提供正确的结果。维基百科的泰勒级数页面有一个名为“近似和收敛”的部分,介绍了这一点。(附注:在“二项式”中没有“c”。 :^)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接