pchip
조각별 3차 에르미트 보간 다항식(PCHIP)
설명
예제
spline
, pchip
, makima
를 사용한 데이터 보간
두 개의 다른 데이터 세트에 대해 spline
, pchip
, makima
에서 생성된 보간 결과를 비교합니다. 이들 함수는 모두 다양한 형태의 조각별 3차 에르미트 보간을 수행합니다. 각각의 함수는 보간 함수의 기울기를 계산하는 방법이 다르므로, 기본 데이터에 평탄 영역이나 요동이 있을 때 다양한 동작이 나타납니다.
평탄 영역을 연결하는 샘플 데이터에 대한 보간 결과를 비교합니다. x
값, 해당 점에서의 함수 값 y
, 쿼리 점 xq
로 구성된 벡터를 만듭니다. spline
, pchip
, makima
를 사용하여 쿼리 점에서 보간을 계산합니다. 비교를 위해 쿼리 점에서 보간된 함수 값을 플로팅합니다.
x = -3:3; y = [-1 -1 -1 0 1 1 1]; xq1 = -3:.01:3; p = pchip(x,y,xq1); s = spline(x,y,xq1); m = makima(x,y,xq1); plot(x,y,'o',xq1,p,'-',xq1,s,'-.',xq1,m,'--') legend('Sample Points','pchip','spline','makima','Location','SouthEast')
이 경우, pchip
과 makima
는 오버슈트를 피하고 평탄 영역을 정확하게 연결할 수 있다는 점에서 비슷하게 동작합니다.
진동 샘플 함수를 사용하여 두 번째 비교를 수행합니다.
x = 0:15; y = besselj(1,x); xq2 = 0:0.01:15; p = pchip(x,y,xq2); s = spline(x,y,xq2); m = makima(x,y,xq2); plot(x,y,'o',xq2,p,'-',xq2,s,'-.',xq2,m,'--') legend('Sample Points','pchip','spline','makima')
기본 함수가 진동 함수인 경우 국소 극값 근처에서 과감하게 평탄화되는 pchip
보다 spline
과 makima
가 점 사이의 움직임을 포착하는 능력이 더 우수합니다
조각별 다항식 구조체를 사용하여 보간하기
x
값에 대한 벡터와 함수 값 y
를 만든 후, pchip
을 사용하여 조각별 다항식 구조체를 생성합니다.
x = -5:5; y = [1 1 1 1 0 0 1 2 2 2 2]; p = pchip(x,y);
구조체에 ppval
을 사용하여 여러 쿼리 점에서 보간을 계산합니다. 결과를 플로팅합니다.
xq = -5:0.2:5; pp = ppval(p,xq); plot(x,y,'o',xq,pp,'-.') ylim([-0.2 2.2])
입력 인수
x
— 샘플 점
벡터
샘플 점으로, 벡터로 지정됩니다. 벡터 x
는 데이터 y
가 주어지는 점을 지정합니다. x
의 요소는 유일해야 합니다.
데이터형: single
| double
y
— 샘플 점에서의 함수 값
벡터 | 행렬 | 배열
샘플 점에서의 함수 값으로, 숫자형 벡터, 행렬 또는 배열로 지정됩니다. x
는 y
와 길이가 동일해야 합니다.
y
가 행렬이나 배열인 경우 마지막 차원의 값 y(:,...,:,j)
는 x
와 일치시킬 값으로 간주됩니다. 이 경우, y
의 마지막 차원은 x
와 길이가 동일해야 합니다.
데이터형: single
| double
xq
— 쿼리 점
스칼라 | 벡터 | 행렬 | 배열
쿼리 점으로, 스칼라, 벡터, 행렬 또는 배열로 지정됩니다. xq
에 지정된 점은 pchip
이 계산하는 보간된 함수 값 yq
의 x 좌표입니다.
데이터형: single
| double
출력 인수
p
— 쿼리 점에서 보간된 값
스칼라 | 벡터 | 행렬 | 배열
쿼리 점에서 보간된 값으로, 스칼라, 벡터, 행렬 또는 배열로 반환됩니다. p
의 크기는 다음과 같이 y
와 xq
의 크기와 관련이 있습니다.
y
가 벡터인 경우,p
는xq
와 크기가 동일합니다.y
가 크기Ny = size(y)
로 구성된 배열인 경우, 다음 조건이 적용됩니다.xq
가 스칼라나 벡터인 경우,size(p)
는[Ny(1:end-1) length(xq)]
를 반환합니다.xq
가 배열인 경우size(p)
는[Ny(1:end-1) size(xq)
를 반환합니다.
pp
— 조각별 다항식
구조체
조각별 다항식으로, 구조체로 반환됩니다. 이 구조체를 ppval
함수와 함께 사용하여 한 개 이상의 쿼리 점에서 보간 다항식의 값을 계산합니다. 이 구조체는 다음 필드를 가집니다.
필드 | 설명 |
---|---|
form | 조각별 다항식의 경우 |
breaks | 각 |
coefs | 각 행 |
pieces | 구간 조각의 개수, |
order | 다항식의 차수 |
dim | 대상의 차원 |
coefs
의 다항식 계수는 각 구간의 로컬 계수이기 때문에, 이 계수를 일반적인 다항 방정식에서 사용하려면 대응하는 매듭 구간의 아래쪽 끝점을 빼야 합니다. 즉, 구간 [x1,x2]
에서 계수 [a,b,c,d]
에 대해, 대응하는 다항식은 다음과 같습니다.
세부 정보
형태 보존 조각별 3차 보간
pchip
는 다음 속성을 갖는 조각별 3차 다항식 를 사용하여 보간합니다.
각 하위 구간 에서 다항식 는 보간 지점에서 지정된 도함수(기울기)를 갖는, 주어진 데이터 점들에 대한 3차 에르미트 보간 다항식입니다.
는 y를 보간합니다. 즉, 이고 1계 도함수 가 연속입니다. 대부분의 경우 2계 도함수 가 불연속이므로, 에서 값이 비약할 수 있습니다.
3차 보간 함수 는 형태를 보존합니다. 에서 기울기는 가 데이터의 형태를 보존하고 단조성을 유지하는 방식으로 선택됩니다. 따라서, 데이터가 단조적인 구간에서 도 단조적이고, 데이터가 국소 극값을 가지는 지점에서 도 국소 극값을 가집니다.
참고
y가 행렬이면, 는 y의 각 행에 대해 이러한 속성을 충족시킵니다.
팁
spline
은pchip
가 를 생성하는 방식과 거의 동일한 방식으로 를 생성합니다. 그러나,spline
은 에서의 기울기를 이와 다르게, 즉 도 연속이 되도록 선택합니다. 이 차이는 여러 가지 영향을 미칩니다.spline
은 가 연속인, 더 매끄러운 결과를 생성합니다.spline
은 데이터가 매끄러운 함수의 값으로 구성된 경우 더 정확한 결과를 생성합니다.pchip
은 데이터가 매끄럽지 않은 경우, 오버슈트를 일으키지 않으며 진동을 줄입니다.pchip
은 더 적은 노력으로 설정할 수 있습니다.두 방법의 계산 비용은 같습니다.
참고 문헌
[1] Fritsch, F. N. and R. E. Carlson. "Monotone Piecewise Cubic Interpolation." SIAM Journal on Numerical Analysis. Vol. 17, 1980, pp.238–246.
[2] Kahaner, David, Cleve Moler, Stephen Nash. Numerical Methods and Software. Upper Saddle River, NJ: Prentice Hall, 1988.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력값
x
는 순증가(Strictly Increasing)해야 합니다.코드 생성 시
NaN
값을 포함하는y
항목은 제거되지 않습니다.pp = pchip(x,y)
구문에 대해 코드를 생성하는 경우, MATLAB®의ppval
함수에pp
를 입력할 수 없습니다. 코드 생성기에서 생성한pp
구조체에서 MATLABpp
구조체를 생성하려면 다음을 수행하십시오.코드 생성 시
unmkpp
를 사용하여 조각별 다항식 세부 정보를 MATLAB에 반환합니다.MATLAB에서
mkpp
를 사용하여pp
구조체를 생성합니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
사용법 관련 참고 및 제한 사항:
분산 배열에 대해서는
pchip(
구문이 지원되지 않습니다.x
,y
)
자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)