호너의 방법

Horner's method

수학과 컴퓨터 과학에서 호너의 방법(또는 호너의 스킴)은 다항식 평가를 위한 알고리즘입니다. 윌리엄 조지 호너의 이름을 따서 명명되었지만, 이 방법은 호너 자신이 조셉 루이 라그랑주에게 귀속되었기 때문에 훨씬 더 오래되었으며, 중국과 페르시아 수학자들로부터 수백 년 전으로 거슬러 올라갈 수 있습니다.[1] 컴퓨터가 등장한 이후 이 알고리즘은 다항식으로 효율적인 계산을 할 수 있는 기본이 되었습니다.

The algorithm is based on Horner's rule, in which a polynomial is written in nested form:

n 곱셈과 덧셈만으로 n차 다항식을 평가할 수 있습니다. 더 적은 산술 연산으로 평가할 수 없는 n차 다항식이 있으므로 이 방법이 최적입니다.[2]

또는 호너의 방법은 1819년 호너에 의해 기술된 다항식의 근을 근사하는 방법을 의미하기도 합니다. 이것은 호너의 법칙을 적용하여 손으로 계산하기에 더 효율적인 뉴턴-랩슨 방법의 변형입니다. 1970년경 컴퓨터가 일반적으로 사용되기 전까지 널리 사용되었습니다.

다항식 평가와 긴 나눗셈

다항식이 주어지면

상수 계수인 경우, 문제는 특정 값 x 에서 다항식을 평가하는 것입니다

이를 위해 새로운 상수 시퀀스는 다음과 같이 재귀적으로 정의됩니다.

b 0 p의 값입니다

이것이 왜 작동하는지 알기 위해 다항식은 다음과 같은 형태로 작성할 수 있습니다.

따라서 식에 {\}}를 반복적으로 대입하면,

이제 다음과 같은 사실을 증명할 수 있습니다.

이 표현은 호너의 실제적인 적용을 구성하는데, 이 표현은 결과를 결정하는 매우 빠른 방법을 제공하기 때문입니다.

는 p {\ p와 동일함을 사용하여 아래의 예를 통해 확인할 수 있습니다. If is a root of , then (meaning the remainder is ), which means you can factor as .

인 b{\값을 찾으려면, {\을 결정하는 것으로 시작합니다 는 단순히 {\와 같습니다 그런 다음 공식을 사용하여 재귀적으로 작업합니다.

에 도착할 때까지

x = 3 {\displaystyle x=3}에 대해 ) = 2 - 6 x 2 + 2 x - 1 {\displaystyle f(x) = 2x^{3}-6x^{2}+2x-1}을 평가합니다.

우리는 다음과 같이 합성 분할을 사용합니다.

 x  x x x 3  2 -6 2 -1  6 -------------------------------------------------------------------------------------------------------------- 

세 번째 행의 항목은 처음 두 개의 항목을 합한 것입니다. 두 번째 행의 각 항목은 x-값(이 예제에서는 3)의 곱이며 세 번째 행의 항목은 바로 왼쪽입니다. 첫 번째 행의 항목은 평가할 다항식의 계수입니다. x- 으로 나눈 () f의 나머지는 5입니다.

그러나 다항식 나머지 정리에 의해, 우리는 가 f( f임을 알 수 있습니다 따라서 ( = 5 displaystyle f(3)= 5}입니다.

예에서 a = a =- 6, a 1 = , = - 1 {\displaystyle a_{3}= 2,a_{2}=-6,a_{1}= 2,a_{0}=-1}인 경우 b 3 = 2, b 2 = 0, b 1 = 2, b 0 = 5 {\displaystyle b_{3}= 2,b_{2}= 0,b_{1}= 2,b_{0}= 5인 경우 세 번째 행의 항목을 확인할 수 있습니다. 그래서 합성 분할은 호너의 방법을 기반으로 합니다.

다항식 나머지 정리의 결과로, 세 번째 행의 항목은 - 3 {\으로 나눈 () 의 몫인 2차 다항식의 계수입니다 나머지는 5개입니다. 이것은 호너의 방법을 다항식의 긴 나눗셈에 유용하게 만듭니다.

- 6 + - 6 x - 2 로 나눕니다

 2 │   1    −6    11    −6    │         2    −8     6    └────────────────────────        1    −4     3     0 

- + 3 x입니다

Let and . Divide by using Horner's method.

  0.5 │ 4  -6   0   3  -5       │     2  -2  -1   1       └───────────────────────         2  -2  -1   1  -4 

세 번째 행은 처음 두 행의 합을 2로 나눈 것입니다. 두 번째 줄의 각 항목은 왼쪽 세 번째 줄의 항목과 함께 1의 곱입니다. 그 대답은.

효율성.

차수 다항식의 단항 형식을 사용하여 평가하려면 반복된 곱셈으로 거듭제곱이 계산되고 각 단항이 개별적으로 평가되는 경우 n개의{\ n개의 덧셈과 + n)/ 2{\ + n) / 필요합니다. 비용은 {\x}의 거듭제곱을 평가하여 개의 덧셈과 - 1 곱셈으로 줄일 수 있습니다.

수치 데이터가 숫자(또는 비트)로 표시되는 경우 순진한 알고리즘은 x{\x}의 비트 수에 약 {\배를 저장합니다 평가된 다항식의 는 대략 n{\ x x x 자체도 저장해야 합니다. 반면 호너의 방법은 개의 추가와 n 곱셈만 필요하며 저장 요구 사항은 비트 수의 n배에 불과합니다 또는, 호너의 방법은 fused 곱하기 덧셈으로 계산할 수 있습니다. 호너의 방법은 개의 덧셈과 곱셈으로 다항식의 첫 번째 개의 도함수를 평가하기 위해 확장될 수도 있습니다.[3]

임의의 다항식을 평가하는 알고리즘은 적어도 많은 연산을 사용해야 한다는 점에서 호너의 방법이 최적입니다. Alexander Ostrowski는 1954년에 필요한 추가 수가 최소라는 것을 증명했습니다.[4] Victor Pan은 1966년에 곱셈의 수가 최소라는 것을 증명했습니다.[5] 그러나 행렬인 경우 호너의 방법은 최적이 아닙니다.

이는 다항식이 단항식 형태로 평가되고 표현의 전제 조건이 허용되지 않는다고 가정하는데, 다항식이 한 번만 평가되는 것은 타당합니다. 그러나 전제 조건이 허용되고 다항식을 여러 번 평가해야 한다면 더 빠른 알고리즘이 가능합니다. 그들은 다항식의 표현의 변환을 포함합니다. 일반적으로 차수 n 다항식은 ⌊n/2 ⌋+2 {\displaystyle n} 덧셈만을 사용하여 평가할 수 있습니다.

병행평가

호너의 법칙의 단점은 모든 연산이 순차적으로 종속적이기 때문에 현대 컴퓨터에서는 명령 수준 병렬을 활용할 수 없다는 것입니다. 다항식 평가의 효율성이 중요한 대부분의 응용 프로그램에서 많은 저차 다항식이 동시에 평가됩니다(컴퓨터 그래픽의 각 픽셀 또는 다각형, 또는 수치 시뮬레이션의 각 그리드 정사각형에 대해). 따라서 단일 다항식 평가 내에서 병렬성을 찾을 필요가 없습니다.

그러나 매우 높은 차수의 단일 다항식을 평가하는 경우 다음과 같이 분해하는 것이 유용할 수 있습니다.

더 일반적으로 요약은 k개의 부분으로 나눌 수 있습니다.

여기서 내부 합산은 호너 방법의 개별 병렬 인스턴스를 사용하여 평가할 수 있습니다. 이를 위해서는 기본적인 호너의 방법보다 약간 더 많은 연산이 필요하지만 대부분의 k-way SIMD 실행이 가능합니다. 현대의 컴파일러는 일반적으로 유리할 때 다항식을 이러한 방식으로 평가하지만 부동 소수점 계산의 경우 (안전하지 않은) 재결합 수학을[citation needed] 가능하게 해야 합니다.

부동소수점 곱셈과 나눗셈에 적용

호너의 방법은 하드웨어 곱셈기가 없는 마이크로 컨트롤러에서 이진수의 곱셈과 나눗셈을 위한 빠르고 코드 효율적인 방법입니다. 곱셈할 이진수 중 하나는 사소한 다항식으로 표현되며, 여기서 (위 표기법을 사용하여) = a_{i}=1}, x = 2 {\displaystyle x=2}입니다. 그런 다음 x(또는 x에서 어떤 거듭제곱까지)를 반복적으로 인수분해합니다.이진수 시스템(베이스 2)에서는 = displaystyle x = 2}이므로 2의 거듭제곱이 인수분해됩니다.

예를 들어 두 숫자(0.15625)와 m의 곱을 구하는 방법은 다음과 같습니다.

방법

두 이진수 dm의 곱을 구하는 방법:

1. 중간 결과를 보유한 레지스터는 d로 초기화됩니다.
2. m에서 가장 중요하지 않은(가장 오른쪽에 있는) 0이 아닌 비트로 시작합니다.
2b. (왼쪽으로) 비트 위치의 수를 0이 아닌 비트 다음으로 많이 계산합니다. 더 중요한 비트가 없으면 현재 비트 위치의 값을 취합니다.
2c. 이 값을 사용하여 중간 결과를 유지하는 레지스터에서 해당 비트만큼 왼쪽 시프트를 수행합니다.
3. 0이 아닌 모든 비트가 카운트된 경우 중간 결과 레지스터에 최종 결과가 유지됩니다. 그렇지 않으면 중간 결과에 추가하고 다음으로 중요한 비트를 m으로 하여 2단계를 계속합니다.

파생

일반적으로 비트 값이 이진수( 2 d1 d 0 {\{2{1}d_의 경우 곱은

알고리즘의 이 단계에서는 계수가 0인 항을 삭제해야 하므로 1과 같은 이진 계수만 계산되므로 인수 방정식에 다음과 같은 의미가 있음에도 불구하고 0으로 곱하거나 나누는 문제는 문제가 되지 않습니다.

분모가 모두 1과 같으므로(또는 항이 없음), 이는 다음과 같이 줄어듭니다.

또는 동등하게(위에서 설명한 "method"와 일치함)

이진(베이스-2) 수학에서 2의 거듭제곱에 의한 곱셈은 레지스터 시프트 연산에 불과합니다. 따라서 2를 곱하는 것은 산술 시프트에 의해 base-2에서 계산됩니다. 인자 (2)는 오른쪽 산술 시프트이고, a (0)는 아무런 연산도 발생하지 않습니다(2 = 1은 곱셈 항등식 요소이므로), a (2)는 왼쪽 산술 시프트입니다. 이제 산술 시프트 연산, 덧셈 및 뺄셈만으로 곱셈 곱셈을 빠르게 계산할 수 있습니다.

이 방법은 단일 명령 이동 및 추가 누적을 지원하는 프로세서에서 특히 빠릅니다. C 부동 소수점 라이브러리와 비교할 때 호너의 방식은 정확성을 다소 희생시키지만, 명목상으로는 13배나 빠르며("정규 서명된 숫자"(CSD) 형태를 사용할 때는 16배나 빠름) 코드 공간의 20%만 사용합니다.[7]

기타 응용프로그램

호너의 방법은 서로 다른 위치 번호 시스템 에 변환하는 데 사용될 수 있습니다(이 경우 x는 숫자 시스템의 기본이고 ai 계수는 주어진 숫자의 기본 x 표현의 숫자). 또한 x가 행렬인 경우에도 사용할 수 있습니다(이 경우 계산 효율의 이득은 더욱 큽니다). 그러나 이러한 경우 더 빠른 방법이 알려져 있습니다.[8]

다항근찾기

나눗셈 알고리즘을 뉴턴의 방법과 결합하면 다항식의 실제 근을 근사할 수 있습니다. 알고리즘은 다음과 같이 작동합니다. Given a polynomial of degree with zeros make some initial guess such that . 이제 다음 두 단계를 반복합니다.

  1. 뉴턴의 방법을 사용하여 0{\ 하여 p 가장 큰 z 1{\을 찾습니다
  2. 호너의 방법을 사용하여(- - z_을 나누어 - 1 을 구합니다 단계 1로 돌아가지만 p - {\n-1과 초기 추측 {\합니다

이 두 단계는 다항식에 대한 모든 실수 0이 발견될 때까지 반복됩니다. 근사적인 0이 충분히 정확하지 않은 경우, 얻어진 값은 축소 다항식이 아닌 완전 다항식을 사용하여 뉴턴 방법의 초기 추측으로 사용될 수 있습니다.[9]

호너의 방법을 이용한 다항식 근찾기

다항식을 고려합니다.

다음으로 확장할 수 있습니다.

위에서 우리는 다항식의 최대 근이 7이라는 것을 알 수 있으므로 8을 초기 추측할 수 있습니다. 뉴턴의 방법을 사용하면 오른쪽 그림의 검은색과 같이 7의 첫 번째 0이 발견됩니다. 다음 ( ) (- x - 7로 나누어 구합니다.

그림 오른쪽에 빨간색으로 그려져 있습니다. 뉴턴의 방법은 초기 추측이 7인 이 다항식의 가장 큰 0을 찾는 데 사용됩니다. 원래 다항식의 두 번째로 큰 0에 해당하는 이 다항식의 가장 큰 0은 3에서 발견되고 빨간색으로 동그라미가 쳐집니다. 차수 5 다항식은 이제(- x - 3로 나누어 구합니다.

노란색으로 표시됩니다. 이 다항식의 0은 뉴턴의 방법을 사용하여 다시 2에서 발견되고 노란색으로 동그라미가 쳐집니다. 호너의 방법은 이제

녹색으로 표시되며 -3에서 0인 것으로 확인됩니다. 이 다항식은 다음으로 줄어듭니다.

파란색으로 표시되고 -5의 영점을 산출합니다. 원래 다항식의 최종근은 뉴턴 방법에 대한 초기 추측으로 최종 0을 사용하거나 ( {\ 줄이고 선형 방정식을 풀면 찾을 수 있습니다. 알 수 있듯이 -8, -5, -3, 2, 3, 7의 예상 근이 발견되었습니다.

다항식의 미분

호너의 방법은 분할된 차이( (y) )/(- x ). - / (y - ) .주어진 다항식 (이전과 같이)

다음과[10] 같이 진행합니다.

완성되면, 우리는

분할된 차이에 대한 이 계산은 ≈y xapproxy}일 p{\p(p({\p(를 별도로 평가하는 것보다 덜 반올림 오류가 발생합니다. 방법으로 = xdisplaystyle y = x}를 대입하면 p(x) {\displaystyle p(x)}의 도함수인 d = p'(x)}가 됩니다.

역사

2차 다항식을 풀기 위한 진지샤오의 알고리즘- x + - = displaystyle -x^{4} + 763200x^{2} - 40642560000 =
결과 : x=840

호너의 논문은 1819년 7월 1일 런던 왕립학회 회의에서 "연속 근사에 의한 모든 차수의 수 방정식을 푸는 새로운 방법"[12]이라는 제목으로 읽혀졌고, 1823년 속편이 나왔습니다.[12] 1819년 런던 왕립학회의 철학적 거래 제2부에 실린 호너의 논문은 월간 리뷰(The Monthly Review)지 또는 1820년 4월 문학 저널(Literary Journal for 1820)에서 한 평론가[permanent dead link] 의해 따뜻하고 광범위하게 환영을 받았습니다. 이에 비해 찰스 배비지(Charles Babbage)의 기술 논문은 이 평론에서 퉁명스럽게 기각되었습니다. 1821년 9월 월간 리뷰의 일련의 리뷰는 홀드레드가 수치 방정식의 직접적이고 일반적인 실용적인 해결책을 발견한 최초의 사람이라는 결론을 내립니다. 풀러는[13] 호너의 1819년 논문에 나타난 방법이 후에 "호너의 방법"으로 알려진 것과는 다르며, 결과적으로 이 방법의 우선순위는 홀드레드(Holdred, 1820)에게 가야 한다는 것을 보여주었습니다.

호너는 영국의 동시대 사람들과는 달리 아르보가스트의 작품인 대륙 문학을 그렸습니다. 호너는 또한 파올로 루피니의 업적을 소홀히 하기는 했지만 존 보니캐슬의 대수학에 관한 책을 면밀히 읽은 것으로 알려져 있습니다.

호너는 이 방법을 사용하기 쉽고 실용적으로 만들었다고 인정받지만, 이는 호너보다 훨씬 이전에 알려졌습니다. 역순으로 호너의 방법은 이미 다음과 같이 알려져 있었습니다.

진자오는 그의 슈슈주장(9절 수학 논문; 1247)에서 호너형 다항식 풀이 방법 포트폴리오를 제시하고 있는데, 이 방법은 11세기 송대 수학자 자현의 초기 연구에 기반을 두고 있습니다. 예를 들어, 한 가지 방법은 특별히 2진법에 적합합니다. 진은 그 예를 들어, 당시 중국의 사례 연구 관습에 따라 예를 제시하고 있습니다. 미카미 요시오중국과 일본의 수학 발전(Leipzig 1913)에서 다음과 같이 썼습니다.

"... 호너의 성공적인 과정이 유럽보다 적어도 6세기나 일찍 중국에서 사용되었다는 사실을 부인할 수 있는 사람은... 물론 우리는 호너의 발명품을 중국의 기원으로 돌릴 의도는 없지만, 시간이 지남에 따라 유럽인들이 직간접적인 방법으로 중국의 방법을 알 수 있었다는 것이 완전히 불가능한 것은 아닙니다."[20]

울리히 리브레흐트는 다음과 같이 결론지었습니다. 이 절차는 중국의 발명품임이 분명합니다... 방법은 인도에서 알려지지 않았습니다. 그는 피보나치가 아마도 아랍인들로부터 그것을 배웠을 것이라고 말했습니다. 그들은 아마도 중국인들로부터 차용했을 것입니다.[21] 유사한 선을 따라 제곱근과 세제곱근을 추출하는 것은 류휘에 의해 이미 지우 장쑤언슈의 문제 IV.16과 22와 관련하여 논의된 반면, 7세기의 왕샤오퉁은 독자들이 그의 책인 지우 수안징에 기술된 근사적 방법으로 세제곱근을 풀 수 있다고 가정합니다.

참고 항목

메모들

  1. ^ 600년 전, 중국 수학자 진 주샤오에 의해 그리고 700년 전, 페르시아 수학자 샤라프 ī 알 ṭ우스에 의해.
  2. ^ 팬 1966
  3. ^ 판키에비치 1968년
  4. ^ 오스트로스키 1954년
  5. ^ 팬 1966.
  6. ^ 크누스 1997.
  7. ^ Kripasagar 2008, 62쪽
  8. ^ 하이암 2002, 섹션 5.4.
  9. ^ Kress 1991, 112쪽.
  10. ^ 페이트맨 & 카한 2000
  11. ^ Librecht 2005, pp. 181-191.
  12. ^ a b 호너 1819.
  13. ^ 풀러 1999, 29-51쪽.
  14. ^ 카조리 1911년.
  15. ^ a b O'Connor, John J.; Robertson, Edmund F., "Horner's method", MacTutor History of Mathematics Archive, University of St Andrews
  16. ^ 분석 Per Quantitatum Series, Fluctes ac Differentias : Cum Enumeratione Linearum Tertii Ordis, Londini. 전 오피시나 피어슨애나입니다 MDCCXI, 페이지 10, 4항.
  17. ^ 뉴턴이 수집한 논문들, 1779년판, 각주, vol. I, p. 270-271
  18. ^ 베르그렌 1990, 304-309쪽.
  19. ^ 사원 1986, 페이지 142.
  20. ^ 미카미 1913, 페이지 77
  21. ^ Librecht 2005, 208쪽.

참고문헌

외부 링크