2016-09-09 12 views
0

교과서에서 문제가 있습니다.다음 Xi 용어를 계산하여 제곱근 n

방정식 Xk+1 = 1/2 * (Xk + n/(Xk) (X0 = 1)을 사용하여 사용자의 제곱근 근사 함수를 작성하십시오.

이 방정식은 다음 Xi 항을 반복적으로 계산함으로써 sqrt'n '을 찾을 수 있다고 말합니다. 사용되는 용어의 수가 많을수록 대답이 좋습니다. 함수에 두 개의 입력 매개 변수, 즉 제곱근 및 계산할 용어의 수를 원하는 수를 허용하십시오. '

저는 이것을 위해 Python3.5.2를 사용하고 있습니다.

attached a picture of the problem

감사합니다!

+1

[숙제에 관한 일반적인 지침] (http://meta.stackexchange.com/a/10812)에 따르면 문제를 먼저 해결하기 위해 ** 성실하게 시도하고 ** 귀하의 질문에. – ahoffner

답변

0

새 학년, 오래된 바빌론 방법.

그럼,이 문제를 해결하지는 않지만 시작하겠습니다.

def sqrt_step(n, xk): 
    return 1/2.0 * (xk + float(n)/xk) 

이의이 n = 100를 설정하자

우리는 각 x_{k+1}을 계산하는 작은 기능을 쓸 수 있습니다.

sqrt_step(100, 1) # returns 50.5 

이제 함수에 몇 번 더 그 수를 공급하자

sqrt_step(100, 50.5) # 26.2 

sqrt_step(100, 26.2) # 15.0 

sqrt_step(100, 15.0) # 10.8 

을 ...이 무한대 k로 (10)에 수렴한다.

이제는 반복적으로 작업을 수행하는 방법이 있다면 k 번 ... 'f'로 시작하고 'ore'로 시작하는 세 글자 단어를 생각하고 있습니다 ...

당신은 문제를 해결하기 위해 정직한 노력했습니다


편집 - 나는 에 갈거야이 숙제 실천 운동하지 할당 가정.

새로운 기능의 내부에서 sqrt_step 함수를 사용하면이 문제를 간단하게 해결할 수 있습니다.

def square_root(n, k): 
    xk = 1 
    for i in range(k): 
     xk = sqrt_step(n, xk) # or just: xk = 1/2.0 * (xk + float(n)/xk) 
    return xk 

테스트 : : 다음과 같이 수행 할 수 있습니다

square_root(64, 100) # 8.0 
square_root(144, 100) # 12.0 

좀 더 고급 해짐에 따라, 당신은 당신이 변수를 덮어 명시 적으로 for 루프를 작성하지 않도록 할 수 있도록 기능적인 프로그래밍 기술에 대해 배우게됩니다. 그러나 지금은 가장 간단한 방법입니다.

+0

InNoam이 내 게시물에 응답하고 시작하도록 도와 주셔서 감사합니다. 나는이 작업을 반복하여 k 번 반복하는 방법을 시각화하는 데 여전히 문제가 있습니다. 지금까지 내가 시도한 것을 보여 드리겠습니다. 데프 sqrt_step (N, XK) 복귀 1/2.0 * (XK + 플로트 (N)/XK) #는 I에 의해이 K 번 반복 시도 언급 같이 DEF sqrt_step (N, XK)xk in range (xk, 1, -1) : return 1/2.0 * (xk + float (n)/xk) 내 추론은 매번 1 씩 감소하여 xk가 1이 될 때까지 반복했다. – Babeeshka

+0

수학에서, 우리는'x_ {k + 1}'이'x_ {k}'만을 알고 있기 때문에이 유형의 메소드를'explicit'이라고 부릅니다. 영어로 이것은 이전 단계에서 얻은 * 가치 *를 아는 것이 가장 중요하다는 것을 의미합니다. 그래서,'xk = 1'의 값을 설정하고'sqrt_step()'함수를 실행 한 다음 *'xk'를 그것으로 대체하십시오 (이것은 프로그래밍 원리에 위반되는 반면에 '불변성'으로 알려져 있습니다. 시작하는 가장 쉬운 방법입니다). xk의 값을 덮어 쓸 횟수 *를 컴퓨터에 간단히 알려주기 위해서'for' 루프가 필요합니다. 특정 단계의 실제 지수는 특별히 중요하지 않습니다. – lnNoam

+0

나는 그것을했다고 생각한다! 당신은 매우 도움이되고 최고입니다. 나는 여기에 내 의견을 형식화하는 방법을 모르겠지만, 나는 그것을 복잡하게 생각하고 설정하는 것이었다 : 범위 (1,10)에 대해 : 다른 라인들 사이에. – Babeeshka