2017-02-06 1 views
0

내가 파이썬 상에 대학 과정을 데려 갈거야 "그렇지 않으면 때까지 통화 기능"을 위해 무슨 일을하는지 알 수 없을, 나는 다음과 같은 요청 할당 문제에 붙어 :

는 기능으로 반복 쓰기 다음 인수 :

f: a function 
start: a numeric starting value 
tol: a numerical tolerance (default value 1e-6) 
itmax: a maximum number of iterations (default value 1000) 

초기 값에서 시작하여, 함수는 (예 = F (Y) Y) (Y) -y보다 작은 (F)의 절대 값까지입니다 함수에 호출을 계속 반복한다 tol 또는 반복 횟수는 itmax와 같습니다.

def approx_equal(f,start,tol,itmax): 
    y=start 
    tol=1e-6 
    itmax=1000 
     for i in range(itmax): 
       y=f(y) 
     while abs(f(y)-y) < tol or i==itmax: 
       break 

나는 "반복 작업을 수행하는 방법을 잘 모르겠어요 : 내 코드가 맞다면

이것은 내가 지금까지 무엇을 가지고

print(approx_equal(iterate(math.sqrt,1.01,tol=1e-4),[6, 1.0000777399813863])) 
print(approx_equal(iterate(math.cos,0),[34, 0.7390855263619245])) 
print(approx_equal(iterate(math.cos,0,tol=1e-8),[46, 0.7390851366465718])) 
print(approx_equal(iterate(math.cos,0,itmax=5),[5, 0.7013687736227565])) 

다음이 True해야 확인하려면 f (y) -y의 절대 값이 tol보다 작거나 반복 횟수가 itmax와 같아 질 때까지 함수를 호출합니다.

+0

"until"을 "while"으로 생각하는 것이 도움이 될 수 있습니다. – joews

답변

0

함수는 거의 비슷하지만 몇 가지 문제가 있습니다. 기본값 매개 변수의 경우 정의 문 첫 행에서 매개 변수를 수행해야합니다. 현재 작성한 방법은 tol입니다. 은 항상입니다. 1e-6itmax입니다. 항상1000입니다.

또한 허용 오차에 대한 검사를 if을 사용하여 추가해야합니다. 차이가 허용 오차보다 작 으면 break 또는 return을 사용할 수 있습니다. breakfor 루프를 깨뜨릴 것이지만 return은 함수를 종료하고 값을 제공합니다.

def approx_equal(f, start, tol=1e-6 ,itmax=1000): 
    y = start 
    for i in range(itmax): 
     y_new = f(y) 
     if abs(y_new-y) < tol: 
      return y # return the value when the next iteration is not needed 
     else: 
      y = y_new 
+0

허용 오차가 발생하지 않고 for 루프가 완료되면 케이스를 처리해야합니다. –