브렌트의 방법

Brent's method

수치해석에서는 브렌트의 방법이분법, 이분법, 역이분법 보간법을 결합한 하이브리드 뿌리 찾기 알고리즘이다.이분법의 신뢰성은 있지만 신뢰성이 떨어지는 일부 방법만큼 빠를 수 있다.알고리즘은 가능한 경우 잠재적으로 빠른 컨버전스 세컨트 방식 또는 역 2차 보간 방식을 사용하려고 하지만, 필요한 경우 다시 더 강력한 이분법 방식으로 떨어진다.브렌트의 방법은 리처드 브렌트[1] 덕분이며 테오도로스 데커의 초기 알고리즘을 기반으로 한다.[2]따라서 이 방법은 브렌트-데커 방법이라고도 한다.

브렌트의 방법에 개선하고 더 빨리 그들의 뿌리를 주변에 평평하고 기능을 위해 더 간단하다 그 대신의 지수 interpolations을 수행합니다 Chandrupatla의 방법,;[3][4]Ridders의 법을 포함한다 2차를 제공하는 더 간단한 마감했다 공식을 통해서 그 반복, 그리고 특발성 혈소판 감소성 자반병 방법은 혼합의 regula-falsi과 김혜진입니다.isecti최적의 최악의 경우 및 무증상 보증을 달성하는 경우.

데커의 방법

이분법(bisection method)과 이분법(secant method)을 결합하려는 생각은 데커(1969년)로 거슬러 올라간다.

방정식 f(x) = 0을 풀려고 한다고 가정해 보자. 이분법처럼 f(a0)와 f(b0)가 반대 기호를 갖도록 a0 b라는0 두 개의 점으로 데커의 방법을 초기화해야 한다.f가 [a0, b0]에 연속적으로 있는 경우, 중간값 정리a0 b 사이0 해결책의 존재를 보장한다.

반복마다 세 가지 포인트가 관련된다.

  • bk 현재의 반복, 즉 f의 근원에 대한 현재의 추측이다.
  • ak "contract" 즉, f(ak)와 f(bk)가 반대 기호를 가지므로 [ak, bk] 구간에 해결책이 포함되어 있는 지점이다.더욱이 f(bk)는 f(ak)보다 작거나 같아야 하기 때문에 bk a보다k 알려지지 않은 해법에 대해 더 잘 추측할 수 있다.
  • bk−1 이전 반복이다(첫 번째 반복의 경우, 우리k−1 b = a0 설정한다.

다음 반복에 대한 두 가지 임시 값이 계산된다.첫 번째 방법은 제2차 방법이라고도 하는 선형 보간법에 의해 주어진다.

그리고 두 번째 것은 이분법(bisection)

secant 방법 s의 결과가 bk m 사이에 엄격하게 놓여 있으면 다음 반복(bk+1 = s)이 되고, 그렇지 않으면 중간점이 사용된다(bk+1 = m).

그런 다음 f(ak+1)와 f(bk+1)가 반대 기호를 가질 수 있도록 새 경계의 값을 선택한다.f(ak)와 f(bk+1)의 기호가 반대일 경우, 경계가 ak+1 = ak 유지된다.그렇지 않으면 f(bk+1)와 f(bk)는 반대 기호를 가지므로 새로운k+1 경계가 a = bk 된다.

마지막으로 f(ak+1) < f(bk+1) , 그렇다면 ak+1 b보다k+1 용액에 대해 더 잘 추측할 수 있으며, 따라서k+1 ak+1 b의 값이 교환된다.

이것으로 데커의 방법의 단일 반복에 대한 설명이 끝난다.

덱커의 방법은 함수 f가 합리적으로 잘 행동하면 잘 된다.단, 모든 반복은 제분법을 사용하지만, 반복 bk 매우 천천히 수렴한다(특히k b - bk−1 임의적으로 작을 수 있다).데커의 방법은 이 경우 이분법보다 훨씬 더 많은 반복을 필요로 한다.

브렌트의 방법

브렌트(1973)는 이 문제를 피하기 위해 작은 수정을 제안했다.그는 세컨트 방법의 결과가 다음 반복으로 받아들여지기 전에 충족되어야 하는 추가 시험을 삽입했다.두 가지 불평등을 동시에 만족시켜야 한다.

이전 단계는 2분 법을 사용했다, 특정한 수치 관용δ{\delta\displaystyle}을 감안할 때 불평등 δ<>bk− bk− 1{\textstyle \delta<>b_{k}-b_{k-1}}야 한다를 개최할 보간, 2분 법 수행과 결과는 사용한 다음 iterati..

이전 단계가 보간법을 수행한 경우, 불평등 < k - - b - [\< 을 대신 사용하여 (불평등이 참일 때) 보간법이나 이간법(불평등이 참이 아닐 때)을 선택한다.

Also, if the previous step used the bisection method, the inequality must hold, otherwise the bisection method is performed and its result used for the next iteration.이전 단계에서 보간법을 수행한 경우, s- < 1 - - b- }}{{2}}}}}이 대신 사용된다.

이 수정은 k번째 반복에서 위의 조건이 연속 보간 단계 크기를 두 번 반복할 때마다 반씩으로 만들기 때문에 최대 k- 1- - - ) 2 /\delta)}의 추가 반복에서 이 두 번을 수행하도록 보장한다.최대 2 k- - b - 2 / ) 반복할 때 단계 크기는 바이제이션 단계를 호출하는 보다 작다.브렌트는 자신의 방법이 최대 N번2 반복을 요구한다는 것을 증명했고, 여기서 N은 이분법 반복 횟수를 나타낸다.함수 f가 잘 행동한다면 브렌트의 방법은 대개 역 2차 또는 선형 보간으로 진행되며, 이 경우 초선형적으로 수렴한다.

더욱이 브렌트의 방법은 (제2의 방법에 의해 사용되는) 선형 보간법 대신 역 2차 보간법을 사용한다.f(bk), f(ak), f(bk−1)가 구별되면 효율을 약간 높인다.따라서 s를 수용하는 조건(선형 보간 또는 역 2차 보간으로 제안하는 값)을 변경해야 한다: s는 (3ak + bk) / 4와 b 사이k 있어야 한다.

알고리즘.

f(a)calculate f(a) calculate f(a) f(b) ( 0이면 f(b)를 계산하는 함수 a, b 및 (pointer to)를 입력하면 루트가 분류되지 않기 때문에 종료함수를 종료한다.끝 만약 만약 f(를)<>f(b) 다음 교환(a,b)끝 만약 c:)은 집합 mflag 반복까지 f(b또는 s))0또는 b−은 작은 충분히(수렴)만약 f(를)≠ f(c)과 f(b)≠ f(c) 다음 s:=한(b)f(c)(f(를)− f(b))(f(를)− f(c))+bf(를)f(c)(f(b)− f(를))(f(b)− f(c))+cf(를)f(b).   (}}+{\frac{cf(를)f(b)}{(f(c)-f(를))(f(c)-f(b))}}}(역 2차 보간법)그 밖의 다른 s:=b− f(b)b−한(b)− f({s\textstyle:=b-f(b){\frac{b-a}{f(b)-f(를)}}}(시컨트 메서드)끝 만약 만약(조건 1)s사이에(3+b)/4{\displaystyle(3a+b)/4}와 b또는(조건 2)(mflag은 설정하고 s−b ≥.B−c /2)또는(조건 3)(mflag과 s−b ≥ c−d /2는 지워진다)또는 그(조건 4)(mflag과 b−c<>δ 설정됩니다)또는(조건 5)(mflag과c−d,<>취소 δ)s:f(s)d를 계산하}}(2분 법)mflag 다른 명확한 mflag 끝 세트:=c(d는 파음에 할당된+b2{s\textstyle:={\frac{a+b}{2}=irst지ime 여기서; mflag가 설정되었기 때문에 위의 첫 번째 반복에서 사용하지 않을 것이다) c := b 만약 f(a)f(s) < 0이면 b := s, 만약 f(b)가 끝나면 swap (a,b)이 이면 s end (root를 반환)

f(x) = (x + 3)(x - 1)로 정의된 함수의 0을 찾고 있다고 가정해 보십시오.2

우리는 [a0, b0] = [-4, 4/3]을 초기 간격으로 삼는다.

f(a0) = -25, f(b0) = 0.48148(본 조의 모든 숫자는 반올림)이 있으므로 f(a0) f(b0) < 0과 f(b0) ≤ f(a0)의 조건을 만족한다.

f(x) = (x + 3)(x - 21)의 그래프
  1. 첫 번째 반복에서는 s = 1.23256을 산출하는 (b−1, f(b−1) = (a0, f(a0) = (-4, -25)와 (b0, f(b0) = (1.3333, 0.48148) 사이의 선형 보간법을 사용한다.이 값은 (3a0 + b0) / 40 b 사이에 있으므로 이 값은 허용된다.더욱이 f(1.23256) = 0.22891이므로 a1 = a0, b = s1 = 1.23256을 설정한다.
  2. 두 번째 반복에서는 (a1, f(a1) = (-4, -25)와 (b0, f(b0) = (1.3333, 0.48148)와 (b1, f(b1) = (1.23256, 0.22891) 사이의 역 2차 보간법을 사용한다.이것은 (3a1 + b1) / 4와 b1 사이에 있는 1.14205를 산출한다.나아가 불평등 1.14205 - b1 ≤ b0 - b / 2−1 만족하므로 이 값을 허용한다.더욱이2 f(1.14205) = 0.083582이므로 a = a1, b = 12.14205를 설정한다.
  3. 세 번째 반복에서는 (a2, f(a2) = (-4, -25)와 (b1, f(b1) = 1.23256, 0.22891)와 (b2, f(b2) = (1.14205, 0.083582) 사이의 역 2차 보간법을 사용한다.이것은 (3a2 + b2) / 4와 b2 사이에 있는 1.09032를 산출한다.그러나 여기서 브렌트의 추가 조건은 불평등 1.09032 - b2 ≤ b1 - b0 / 2가 충족되지 않기 때문에 이 값은 거부된다.대신 [a2, b2] 구간의 중간점 m = -1.42897을 계산한다.우리는 f(m) = 9.26891을 가지고 있으므로 a3 = a2, b = -13.42897을 설정한다.
  4. 네 번째 반복에서는 (a3, f(a3) = (-4, -25)와 (b2, f(b2) = (1.14205, 0.083582)와 (b3, f(b3) = (-1.42897, 9.26891) 사이의 역 2차 보간법을 사용한다.이는 (3a3 + b3) / 4와 b3) 사이의 간격이 아닌 1.15448을 산출한다.따라서 중간점 m = -2.71449로 대체된다.우리는 f(m) = 3.93934를 가지고 있으므로 a4 = a3, b = -24.71449를 설정한다.
  5. 5차 반복에서 역 2차 보간 생산량은 -3.45500으로 필요한 간격에 있다.단, 이전의 반복은 이분법 단계였기 때문에 불평등 -3.45500 - b4b43 - b / 2를 만족시킬 필요가 있다.이 불평등은 거짓이므로 중간점 m = -3.35724를 사용한다.우리는 f(m) = -6.78239를 가지고 있으므로 m은 새로운 경계5 되고(a = -3.35724) 반복은 그대로 유지된다5(b4 = b).
  6. 6차 반복에서는 b5 = b이기4 때문에 역 2차 보간법을 사용할 수 없다.따라서 (a5, f(a5) = (-3.35724, -6.78239)와 (b5, f(b5) = (-2.71449, 3.93934) 사이의 선형 보간법을 사용한다.결과는 s = -2.95064로 모든 조건을 만족한다.그러나 이전 단계에서 반복이 변하지 않았기 때문에, 우리는 이 결과를 거부하고 다시 이분법으로 돌아간다.업데이트 s = -3.03587 및 f(s) = -0.58418.
  7. 7차 반복에서 우리는 다시 역 2차 보간법을 사용할 수 있다.결과는 s = -3.00219로 모든 조건을 만족한다.이제 f(s) = -0.03515이므로 a7 = b6 b = -3.00219(a7 b77 조건 f(b7) ≤ f(a7)가 만족되도록 교환한다.(수정 : 선형 보간 =- , (s )= 0.
  8. 8차 반복에서는 a7 = b6. 선형 보간에서 s = -2.99994가 발생하므로 역 2차 보간법을 사용할 수 없으며, 이는 받아들여진다.(수정 : =- 2, ( )=
  9. 다음9 반복에서 루트 x = -3 + 6/10−8b10 = -3 - 3/10에−15 빠르게 접근한다. (수정 : Iter 9 : f(s) = -1.4 × 10−7, Iter 10 : f(s) = 6.96 × 10−12).

구현

  1. minima.hpp에서 기능 최소화와 로케이팅 함수 Minima의 예.
  2. 루트 파인딩은 브렌트의 원본인 TOMS748부스트보다 더 현대적이고 효율적인 알고리즘인 새로운 TOMS748을 구현한다.를 들어 TOMS748을 내부적으로 사용하는 수학 루팅 소견.

참조

  1. ^ 브렌트 1973
  2. ^ 데커 1969
  3. ^ Chandrupatla, Tirupathi R. (1997). "A new hybrid quadratic/Bisection algorithm for finding the zero of a nonlinear function without using derivatives". Advances in Engineering Software. 28 (3): 145–149. doi:10.1016/S0965-9978(96)00051-8.
  4. ^ "Ten Little Algorithms, Part 5: Quadratic Extremum Interpolation and Chandrupatla's Method - Jason Sachs".
  • Brent, R. P. (1973), "Chapter 4: An Algorithm with Guaranteed Convergence for Finding a Zero of a Function", Algorithms for Minimization without Derivatives, Englewood Cliffs, NJ: Prentice-Hall, ISBN 0-13-022335-2
  • Dekker, T. J. (1969), "Finding a zero by means of successive linear interpolation", in Dejon, B.; Henrici, P. (eds.), Constructive Aspects of the Fundamental Theorem of Algebra, London: Wiley-Interscience, ISBN 978-0-471-20300-1

추가 읽기

  • Atkinson, Kendall E. (1989). "Section 2.8.". An Introduction to Numerical Analysis (2nd ed.). John Wiley and Sons. ISBN 0-471-50023-2.
  • Press, W. H.; Teukolsky, S. A.; Vetterling, W. T.; Flannery, B. P. (2007). "Section 9.3. Van Wijngaarden–Dekker–Brent Method". Numerical Recipes: The Art of Scientific Computing (3rd ed.). New York: Cambridge University Press. ISBN 978-0-521-88068-8.
  • Alefeld, G. E.; Potra, F. A.; Shi, Yixun (September 1995). "Algorithm 748: Enclosing Zeros of Continuous Functions". ACM Transactions on Mathematical Software. 21 (3): 327–344. doi:10.1145/210089.210111.

외부 링크