2013-01-26 3 views
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)  
+0

그것은'python' 당신이 python''로 태그를해야한다. – ja72

+0

Taylor의 시리즈를 원하는 지점은 무엇입니까? 'x = 0'에 관해서는 그것을 정의하지 않는다. – ja72

+0

놀라운 점은 'x = 1'에서 벗어난 오류가 더 많은 용어가 고려 될수록 커집니다. – ja72

답변

4

의 공식을 가지고있다. 미성년자는 (1+x)^alpha이 아닌 확장은 x^alpha이 아니므로 i**k이 실제로 (i-1)**k이어야합니다. 이렇게하면 당신은 의심 sqrt(1)에 대한 답을 종료하는 방법을 볼 수 있습니다

1.41920471191 1.0 
5.234375 1.41421356237 

당신의 출력이 훨씬 더있는

1.0 1.0 
1.41920471191 1.41421356237 

sqrt(2)이다집니다. 불행하게도 나머지 조항은 여전히 ​​매우 좋지 않다 :

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 

하지만 그건 예상 할 수있어, 때문에 같은 :

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 

100에 10에서 표현하는 용어의 수를 증가가 더 나쁜 일을하게

>>> i = 0.7 
>>> sum(binomical(0.5, k) * (i-1) ** k for k in range(10)) 
0.8366601005565644 
>>> i**0.5 
0.8366600265340756 

우리 : 당신이 링크 된 페이지는이 x의 절대 값이 1 그래서 우리는 작은 숫자의 뿌리를 얻기의 좋은 일을 할 수있는보다 작 때 수렴에만 보장, 설명 가능성 제로 -

일반 테이크 아웃 테일러 시리즈는 radius of convergence을 가지고있다 등

>>> 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 

을하거나 다른 점을 중심으로 테일러 급수을 : 다른 숫자를 다루는 일을 축소하는 시도 할 수 있습니다 ! - 올바른 결과를 제공합니다. Wikipedia Taylor 시리즈 페이지에는 이것을 다루는 "Approximation and convergence"섹션이 있습니다.

(추신 : "이항"없음 "C". ^)

+0

자세한 답변을 주셔서 대단히 감사합니다! –