보간은 알고 있는 값 사이에 있는 알 수 없는 값의 추정 기법 유형입니다. 보간은 알려진 데이터 포인트의 개별 세트 범위 사이에 새로운 데이터 포인트를 구성하는 프로세스입니다.
보간을 사용하는 응용 프로그램이나 이유는 계산 비용을 줄일 수 있기 때문입니다. 특정 값을 계산하는 공식(함수)이 계산하기에 너무 복잡하거나 비용이 많이 드는 경우 보간법을 사용하는 것을 선호합니다. 몇 개의 데이터 포인트는 원래 함수를 사용하여 계산되고 나머지는 보간을 사용하여 추정할 수 있습니다. 이것은 완전히 정확하지 않을 수 있지만 상당히 유사합니다!
따라서 기본적으로 여기에서는 감소된 계산 비용과 단순성이 보간 오류로 인한 손실보다 큽니다.
베셀의 보간 공식
f(u) = {(f(0)+f(1))/2} + {u - ½}𝛥f(0) + {u(u-1)/2!}{(𝛥2 f(-1) + 𝛥2 f(0))/2} + {u(u-1)(u - ½)/3!}𝛥3f(-1) + {u(u+1)(u-1)(u-2)/4!}{(𝛥4f(-2) + 𝛥4f(-1))/2}+..
여기,
f(0)은 일반적으로 중간 지점인 원점입니다.
u =x - f(0) / h, gh는 차이의 간격입니다.
예시
바셀의 보간법을 설명하는 프로그램 -
#include <iostream> using namespace std; float calU(float u, int n){ if (n == 0) return 1; float result = u; for (int i = 1; i <= n / 2; i++) result = result*(u - i); for (int i = 1; i < n / 2; i++) result = result*(u + i); return result; } int factorial(int n){ if(n == 1) return 1; return n * factorial(n-1); } int main(){ int n = 6; float x[] = { 50, 51, 52, 53, 54, 55 }; float y[n][n]; y[0][0] = 8.000; y[1][0] = 7.746; y[2][0] = 7.674; y[3][0] = 7.571; y[4][0] = 7.469; y[5][0] = 7.231; for (int i = 1; i < n; i++) for (int j = 0; j < n - i; j++) y[j][i] = y[j + 1][i - 1] - y[j][i - 1]; float value = 53.2; float sum = (y[2][0] + y[3][0]) / 2; int index; if (n % 2) index = n/2; else index = n/2 - 1; float u = (value - x[index]) / (x[1] - x[0]); for (int i = 1; i < n; i++) { if (i % 2) sum+= (((u-(0.5))*calU(u, i - 1)*y[index][i])/factorial(i)); else sum+= ((calU(u, i)*(y[index][i]+y[-- index][i])/(factorial(i)*2))); } cout<<"Value at "<<value<<" found using Bessels's interpolation is "<<sum; return 0; }
출력
Value at 53.2 found using Bessels's interpolation is 7.54985