2009-12-29 3 views

답변

4

저는 알고리즘에 익숙하지 않습니다. 그러나 C 소스와 알고리즘의 Wikipedia description을 비교할 수 있습니다. 알고리즘은 직설적 인 것처럼 보입니다 (루트를 찾는 메소드에 익숙한 경우). 그러나 C 구현은 포트란의 직접 포트처럼 보이므로 읽기가 어렵습니다.

가장 좋은 추측은 e이 루프 조건과 관련이 있다는 것입니다. 다음, e = b - a 나중에 if (fabs(e) <= tol ... : 이 repeat until f(b or s) = 0 or |b − a| is small enough (convergence)

C 소스는 말한다 :

은 위키 백과 (알고리즘의 라인 8) 말한다.

내가 변수의 목적이 책에서 명확하게 설명 될 수 있기를 바랍니다,하지만 분명히


이 좋아 :)없는 것, 여기 당신은 간다. 원래 구현 (algol 60)을 찾았습니다 here. 알고리즘의 좋은 설명 이외에, 그것은 (50 페이지에서 시작) 말한다 :

e가 마지막 전 단계에서 p/q의 값이 될 수 있습니다. |e| < δ 또는 |p/q|1/2|e| 인 경우 이등분을 수행하십시오. 그렇지 않으면 우리는 Dekker의 알고리즘처럼 이분법 또는 보간을 수행합니다. 따라서, |e|은 모든 두 번째 단계에서 최소한 2의 계수만큼 감소하고, |e| < δ 이분법이 수행되어야 할 때. (A 양분 후 우리는 다음 단계 e = m 걸릴.)

그래서 e의 추가 데커의 알고리즘의 브렌트의 "기본 수정"입니다.

+0

예, "if"문에서 읽히기 때문에 "e"가 루프 조건과 관련되어 있음을 알 수 있습니다 ... 요점은 위키 백과 조건문에서 "b"와 "a"는 (GSL과 Netlib 코드에서 "b"는 가장 좋은 추측이며 "a"는 이전의 최상의 추측이며, "c"는 반대 지점 임). –

+0

위 업데이트를 참조하십시오. – Seth

+0

감사합니다.Google 도서를 통해 원본 종이를 검색하는 방법에 대해 생각해 볼 수있었습니다 ... –

0

E는 "엡실론 (epsilon)"변수이며 근본적으로 얼마나 가깝게 가까워 졌는지 측정합니다. 특정 애플리케이션에 20 자리의 정밀도가 필요하지 않을 수 있으므로 엡실론을 사용하면 필요한 반복 횟수 (즉, 실행 시간)와 필요한 정확성 간의 균형을 맞출 수 있습니다.

부동 소수점 숫자로는 정확하지 않을 수 있으므로 엡실론은 약간 작은 0이 아닌 숫자 여야합니다. 실제 값은 응용 프로그램에 따라 다릅니다 ... 기본적으로 가장 큰 오류입니다.

+1

"e"는 a) 반복 사이에서 변화하는 변수이고, b) 역 2 차 보간을 할 것인지 아니면 2 등분으로 돌아갈 것인지를 결정할 때만 검사되고, c) 이미 존재하는 것이기 때문에 나는 그렇게 생각하지 않는다. "탄성"공차 변수 "tol"은 "e"가 주장하는 것을 담당합니다. 쿠키가 없습니다. –

+0

저는 그가 기본적으로 옳다고 생각합니다, 그는 원하는 정밀도를 지정하는 상수라고 말하는 것이 아니라 원하는 정밀도를 지정하는 상수와 비교하는 값이라고 말하는 것입니다. 다른 대답과 잘 어울립니다. 수렴 특성을 기반으로 사용할 알고리즘 (역 이차원 대 이분법)을 결정하는 데 사용할 수도 있습니다. –

+0

e는 엡실론 변수가 아니며 그 변수는 tol1입니다. – Robotbugs

-1

양분 단계에서 간격은 정확히 반으로 나뉩니다. 따라서 간격의 현재 너비를 유지하는 e도 절반으로 줄어 듭니다.

관련 문제