2017-11-22 5 views
1

나는 파이썬을 처음 접했고 나의 임무의 일부로 약간의 문제가있다.파이를 7s.f로 평가하려고합니다. arctan (x)의 Taylor 시리즈 근사 결과를 사용합니다. while 루프로 고생하다

먼저 우리는 Taylor 계열 확장을 사용하여 arctan (x)을 근사화하는 함수를 정의해야했습니다.

이제 arctan (1) = pi/4를 사용하여 pi를 7sf로 평가하고 내 수준의 정확도에 필요한 반복 횟수 N을 찾아야합니다.

import math as mt 


def TaylorExp (x,N): 
    if abs(x) <=1: 
      n=0.0 
      total = 0.0 
      while (n<N): #performs N iterations. 
       c = (((-1)**n)/((2*n)+1))*(x**((2*n)+1)) 
       total += c 
       n += 1  
      return total 

여기 7sf에 파이를 평가하고 N이 필요 찾으려 내 코드입니다 : 여기

은 (조건문은 할당의 또 다른 부분이) 내 테일러 확장에 대한 내 코드입니다 :

i=0 
z = 0 
k=0 
while ((format(k,'.6f'))!= (format(mt.pi,'.6f'))): 
    z = TaylorExp(1,i) 
    i += 1 
    k= z*4 
print ('The value for pi found from arctan (1) is', format(k,'.6f'),' which is accurate to 7sf.') 
print ('The number of iterations N required is: ',i, format(mt.pi, '.6f')) 

그것은 최대 3 소수점 신속하게 작동하지만, 5, 6 DP에 대한 4dp 및 시간/일 분 정도 걸립니다. 나는 이것이 매우 비효율적 인 방법이라고 이해하지만, while while while while while while while while while while while while while while while while while while while while while while while while while while while while. 나는 나의 TaylorExp 함수를 사용하는 더 빠른 방법을 찾을 수 없으므로 어떤 도움도 크게 감사 할 것입니다.

+0

어떻게 든 이해할 수 없습니다 오래 .. 지연을 어디에서 오는지 알아 내려면 코드를 작은 조각으로 나누십시오. –

+0

소수 자릿수 5에 대해서는 1,000,000 반복 동안 초 걸리지 만 매우 느리게 수렴하는 것처럼 보입니다. –

답변

2

코드는 처음으로 O(n^2) 시간, 1 회 반복, 두 번째 2 회 등을 수행합니다.

대신 순서에 따라 일련의 모든 단계에서 산출 발전기, 돌아가려면 TaylorExp 기능을 변경할 수 있습니다 : 내 컴퓨터에서

i = 0 
k = 0.0 

for z in TaylorExp(1): 
    k = z * 4 
    if format(k, '.6f') == format(math.pi, '.6f'): 
     break 
    i += 1 

print ('The value for pi found from arctan (1) is', format(k, '.6f'),' which is accurate to 7sf.') 
print ('The number of iterations N required is: ', i, format(math.pi, '.6f')) 

이 같은

def TaylorExp(x): 
    total = 0.0 
    n = 0.0 
    while True: 
     c = (((-1)**n)/((2*n)+1))*(x**((2*n)+1)) 
     n += 1 
     total += c 
     yield total 

그리고 그것을 사용을 ,이 코드는 약 5 초 걸리고 다음과 같이 인쇄합니다.

The value for pi found from arctan (1) is 3.141593 which is accurate to 7sf. 
The number of iterations N required is: 1181460 3.141593 
+0

환상적이고, 도움과 설명에 너무 감사드립니다. 나는 완벽하게 이해합니다. – Alex