에르미트 보간법 문서 원본 보기
←
에르미트 보간법
둘러보기로 이동
검색으로 이동
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{위키데이터 속성 추적}} [[수치해석학]]에서 '''에르미트 보간법'''({{lang|en|Hermite interpolation}})은 프랑스의 수학자 에르미트의 이름을 딴 [[보간법]]이다. 다항함수 형태로 보간된다. == 개요 == 뉴턴 보간법과 달리, 에르미트 보간법은 자료 점들을 값과 1차 미분값을 대응시킨다. 즉 ''n''차 미분값들 <math>(x_0, y_0'),\ldots,(x_{n-1}, y_{n-1}')</math>이 ''n'' 자료 점들 <math>(x_0, y_0),\ldots,(x_{n-1}, y_{n-1})</math>에 추가로 주어져야만 한다. 뉴턴 다항식이 최대 자유도 ''n'' − 1을 가지는 반면, 이 보간법의 다항식 결과는 대부분 2''n'' − 1의 자유도를 가지게 된다. == 사용 == 함수 ''f''의 에르미트 다항식을 계산하기 위해 분할차(divided difference)들을 사용할 때, 첫단계는 각 점들을 복제하는 것이다. 그러므로 우리가 보간하기 원하는 함수 ''f''에 대해 ''n'' + 1 자료점들 <math>x_0, x_1, x_2, \ldots, x_n</math>과 값들, <math>f(x_0), f(x_1), \ldots, f(x_n)</math>과 <math>f'(x_0), f'(x_1), \ldots, f'(x_n)</math>이 주어지면 다음과 같은 새로운 자료집합을 만든다. :<math>z_0, z_1, \ldots, z_{2n+1}</math> :<math>z_{2i}=z_{2i+1}=x_i</math> 이제 지점들 <math>z_0, z_1, \ldots, z_{2n+1}</math>에 대한 분할차 표를 만든다. 하지만 몇몇 분할차들은 정의되지 않았다. :<math>z_i = z_{i + 1}\implies f[z_i, z_{i+1}] = \frac{f(z_{i+1})-f(z_{i})}{z_{i+1}-z_{i}} = \frac{0}{0}</math> 이 경우 분할차를 <math>\frac{f'(z_i)}{1}</math>로 대체한다. 나머지 것들은 정상적으로 계산된다. 이제, 이 과정은 더 고차(高次) 미분값들의 에르미트 보간이 가능하도록 일반화될 수 있다. 각 점이 같은 개수의 미분값들을 가져야 한다는 요구가 없더라도, 각 점들에 대해 ''k''차 미분값들이 주어졌다고 하자. 그러면 자료집합 <math>z_0, z_1, \ldots, z_{kn-1}</math>은 각 자료점들이 ''k''개 복제되면서 만들어진다. 그러면 ''n'' 자료점들에 대해 각도가 대부분 <math>(k + 1)n - 1</math>인 다항식 하나가 생성될 것이다. 이제 동일한 값들 ''m''개의 분할차는 <math>\frac{f^{(m - 1)}(x_i)}{(m - 1)!}</math>으로 대체된다. 예를 들면, <math>f[x_i, x_i, x_i, x_i]=\frac{f^{(3)}(x_i)}{6}</math>과 <math>f[x_i, x_i, x_i]=\frac{f^{(2)}(x_i)}{2}</math> 등이다. == 예시 == 함수 <math>f(x) = x^8 + 1</math>의 경우를 생각해보자. <math>x \in \{-1, 0, 1\}</math>에서 함수를 두번 미분하면서 다음 자료를 얻는다. :{| class="wikitable" style="text-align: center; padding: 1em;" |- ! ''x'' || ''ƒ''(''x'') || ''ƒ''<nowiki>'</nowiki>(''x'') || ''ƒ''<nowiki>''</nowiki>(''x'') |- ! −1 | 2 || −8 || 56 |- ! 0 | 1 || 0 || 0 |- ! 1 | 2 || 8 || 56 |} 두 미분값들을 가지고 집합 <math>\{z_i\} = \{-1, -1, -1, 0, 0, 0, 1, 1, 1\}</math>를 구성한다. 분할차표는 다음과 같다. :<math> \begin{matrix} z_0 = -1 & f[z_0] = 2 & & & & & & & & \\ & & \frac{f'(z_0)}{1} = -8 & & & & & & & \\ z_1 = -1 & f[z_1] = 2 & & \frac{f''(z_1)}{2} = 28 & & & & & & \\ & & \frac{f'(z_1)}{1} = -8 & & f[z_3,z_2,z_1,z_0] = -21 & & & & & \\ z_2 = -1 & f[z_2] = 2 & & f[z_3,z_2,z_1] = 7 & & 15 & & & & \\ & & f[z_3,z_2] = -1 & & f[z_4,z_3,z_2,z_1] = -6 & & -10 & & & \\ z_3 = 0 & f[z_3] = 1 & & f[z_4,z_3,z_2] = 1 & & 5 & & 4 & & \\ & & \frac{f'(z_3)}{1} = 0 & & f[z_5,z_4,z_3,z_2] = -1 & & -2 & & -1 & \\ z_4 = 0 & f[z_4] = 1 & & \frac{f''(z_4)}{2} = 0 & & 1 & & 2 & & 1 \\ & & \frac{f'(z_4)}{1} = 0 & & f[z_6,z_5,z_4,z_3] = 1 & & 2 & & 1 & \\ z_5 = 0 & f[z_5] = 1 & & f[z_6,z_5,z_4] = 1 & & 5 & & 4 & & \\ & & f[z_6,z_5] = 1 & & f[z_7,z_6,z_5,z_4] = 6 & & 10 & & & \\ z_6 = 1 & f[z_6] = 2 & & f[z_7,z_6,z_5] = 7 & & 15 & & & & \\ & & \frac{f'(z_7)}{1} = 8 & & f[z_8,z_7,z_6,z_5] = 21 & & & & & \\ z_7 = 1 & f[z_7] = 2 & & \frac{f''(z_7)}{2} = 28 & & & & & & \\ & & \frac{f'(z_8)}{1} = 8 & & & & & & & \\ z_8 = 1 & f[z_8] = 2 & & & & & & & & \\ \end{matrix} </math> 그리고 뉴턴 다항식을 생성할 때처럼, 분할차표의 대각선 계수들을 가져와서 ''k''번째 계수에 <math>\prod_{i=0}^{k-1} (x - z_i)</math>를 곱하면 다음과 같은 다항식을 생성할 수 있다. :<math> \begin{align} P(x) &= 2 - 8(x+1) + 28(x+1) ^2 - 21 (x+1)^3 + 15x(x+1)^3 - 10x^2(x+1)^3 \\ &\quad + 4x^3(x+1)^3 -1x^3(x+1)^3(x-1)+x^3(x+1)^3(x-1)^2 \\ &=2 - 8 + 28 - 21 - 8x + 56x - 63x + 15x + 28x^2 - 63x^2 + 45x^2 - 10x^2 - 21x^3 \\ &\quad + 45x^3 - 30x^3 + 4x^3 + x^3 + x^3 + 15x^4 - 30x^4 + 12x^4 + 2x^4 + x^4 \\ &\quad - 10x^5 + 12x^5 - 2x^5 + 4x^5 - 2x^5 - 2x^5 - x^6 + x^6 - x^7 + x^7 + x^8 \\ &= x^8 + 1. \end{align} </math> == 그래픽스 응용 == 마이크로소프트사의 [[다이렉트 X SDK]]에서는 D3DXVecHermite라는 함수로 에르미트 보간법을 이용할 수 있다. D3DXVecHermite 함수의 정의는 다음과 같다. <syntaxhighlight lang='c'> D3DXVECTOR3* WINAPI D3DXVecHermite( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pT1, CONST D3DXVECTOR3 *pV2, CONST D3DXVECTOR3 *pT2, FLOAT s ); </syntaxhighlight> 위에서 각 인수의 의미는 다음과 같다. *pV1: 시작점의 좌표(0,0,0에서 이 점까지의 벡터값) *pT1: 시작점에서 다음 지점까지의 벡터값(= pV2 - pV1) *pV2: 다음 지점의 좌표(0,0,0에서 이 점까지의 벡터값) *pT2: 다음 지점에서 그 다음지점의 벡터값(= pV3 - pV2) *s: 0.0f ~ 0.1f의 상수 아래와 같이 사용할 수 있다. <syntaxhighlight lang='c'> D3DXVECTOR3 pOut(0,0,0), pV1(-2.0f,-2.0f,-2.0f), pT1, pV2(1.0f,1.0f,1.0f), pT2, pV3(2.0f,1.5f,3.0f); FLOAT s; pT1 *= 0.0f; pT2 *= 0.0f; pT1 = pV2 - pV1; pT2 = pV3 - pV2; s = 0.5f; D3DXVecHermite(&pOut, &pV1, &pT1, &pV2, &pT2, s); </syntaxhighlight> pOut.x , pOut.y, pOut.z는 에르미트 보간법에 의하여 발생된 곡선의 0.5f 지점(중앙지점)의 3차원 좌표값을 알려준다. 이것은 모노레일, 게임, 수로건설, 철도건설, 항로계산등의 실제적인 업무에 사용되기도 한다. 이후 더 부드러운 곡선을 만들어 내는 방법인 [[Catmull-Rom 보간법]]이 개발되었기에, 현재는 에르미트 보간법을 대신하여 많이 사용되고 있다. 하지만, 이러한 방식을 처음 고안한 사람이 에르미트이기에, 실제로는 Catmull-Rom 보간법을 사용하면서도 에르미트 보간법이라고 통칭하는 경우도 많다. == 같이 보기 == * [[입방 에르미트 스플라인]] * [[차분]] * [[다항식 보간]] * [[라그랑주 다항식]] * [[베른슈타인 다항식]] * [[중국인의 나머지 정리]] {{전거 통제}} [[분류:보간법]] [[분류:유한차분법]] [[분류:계승과 이항식 주제]]
이 문서에서 사용한 틀:
틀:Lang
(
원본 보기
)
틀:위키데이터 속성 추적
(
원본 보기
)
틀:전거 통제
(
원본 보기
)
에르미트 보간법
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
한국어
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보