Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

csapi

3차 스플라인 보간

설명

예제

참고

3차 스플라인을 보간할 때 더 간단하지만 유연성은 떨어지는 방법을 사용하려면 곡선 피팅기 앱 또는 fit 함수를 사용해 보십시오. 평활화 스플라인 소개 항목도 참조하십시오.

pp = csapi(x,y)는 매듭 시퀀스 x를 가지며 j=1:length(x)에 대해 x(j)에서 값 y(:,j)를 갖는 3차 스플라인 s의 ppform을 반환합니다. 값 y(:,j)는 스칼라, 벡터, 행렬 및 N차원 배열일 수 있습니다. 함수는 동일한 데이터 지점을 사용하여 데이터 점의 평균을 구한 다음 지점을 기준으로 정렬합니다. x가 정렬된 데이터 지점인 경우 스플라인 s는 다음과 같은 not-a-knot 끝점 조건을 충족합니다.

jumpx(2)Ds3=0=jumpx(end1)D3(s)

여기서 D3s는 s의 3계 도함수입니다.

x가 길이가 n1, ..., nm인 시퀀스 x1, ..., xm으로 구성된 셀형 배열인 경우 y는 크기가 [n1,...,nm]인(또는 보간 함수가 d 값을 갖는 경우 크기가 [d,n1,...,nm]인) 배열입니다. 이 경우 pp는 이러한 데이터에 대한 m-3차 스플라인 보간 s의 ppform입니다. 구체적으로 보면 다음과 같습니다.

s(x(i1),,x(im))=y(:,i1,,im)

여기서 i1=1:nl이고 im=1:nm입니다.

이 보간 3차 스플라인에 대해 값을 구하거나 미분, 플로팅과 같은 연산을 수행하려면 pp 구조체를 사용하십시오. 자세한 내용은 fnval, fnder, fnplt 함수를 참조하십시오.

예제

values = csapi(x,y,xx)는 점 xx에서 계산된 평활화 스플라인의 값을 반환합니다. 이 구문은 fnval(csapi(x,y),xx)와 동일합니다.

이 명령은 MATLAB® 함수 spline과 동일하며, csapi가 (이제는 spline도) 벡터 값 데이터를 받으며 그리딩된 데이터를 처리할 수 있다는 점을 제외하면 PGS의 Fortran 루틴 CUBSPL의 간소화된 버전입니다.

예제

모두 축소

이 예제에서는 Curve Fitting Toolbox™의 csapi 명령을 사용하여 3차 스플라인 보간을 생성하는 방법을 보여줍니다.

2개 점에 대한 보간

다음 명령은

values = csapi(x,y,xx)

not-a-knot 끝점 조건을 사용하여 주어진 데이터(x,y)에 대한 3차 스플라인 보간을 하여 xx에서의 값을 반환합니다. 여기서의 보간 함수는 절점 시퀀스 x를 갖는 조각별 3차 함수입니다. 이 함수의 3차 조각이 합쳐져 2개의 연속 도함수를 갖는 하나의 함수가 생성됩니다. "not-a-knot" 끝점 조건은 첫 번째 내부 절점과 마지막 내부 절점에서 3계 도함수도 연속적(반올림 오차까지)이라는 조건입니다.

데이터 점을 2개만 지정하면 직선 보간이 생성됩니다.

x = [0 1];
y = [2 0];
xx = linspace(0,6,121);
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Two Points')

Figure contains an axes object. The axes object with title Interpolant to Two Points contains 2 objects of type line. One or more of the lines displays its values using only markers

3개 점에 대한 보간

3개의 데이터 점을 지정하면 함수가 포물선을 출력합니다.

x = [2 3 5];
y = [1 0 4];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Interpolant to Three Points')

Figure contains an axes object. The axes object with title Interpolant to Three Points contains 2 objects of type line. One or more of the lines displays its values using only markers

5개 점에 대한 보간

보다 일반적으로, 4개 또는 5개 데이터 점을 지정하면 함수가 3차 스플라인을 출력합니다.

x = [1 1.5 2 4.1 5];
y = [1 -1 1 -1 1];
plot(xx,csapi(x,y,xx),'k-',x,y,'ro')
title('Cubic Spline Interpolant to Five Points')

Figure contains an axes object. The axes object with title Cubic Spline Interpolant to Five Points contains 2 objects of type line. One or more of the lines displays its values using only markers

x가 4개 이상의 요소를 갖는 벡터라고 가정했을 때, pp = csapi(x,y) 문은 다음 문과 동일한 스플라인을 pp에 대입합니다(반올림 오차 이내에서 동일). 단, 이 두 번째 방법으로 구한 스플라인의 표현은 x(2)x(n-1)에서 절점을 사용하지 않습니다.

pp = fn2fm(spapi(augknt(x([1 3:(end-2) end]),4),x,y),"pp");

간단한 이변량 예제로, Ricker 웨이블릿에 대한 쌍삼차 스플라인 보간을 플로팅해 봅니다.

x =.0001 + (-4:.2:4); 
y = -3:.2:3;
[yy,xx] = meshgrid(y,x);
r = pi*sqrt(xx.^2+yy.^2); 
z = sin(r)./r;
bcs = csapi({x,y},z); 
fnplt(bcs) 
axis([-5 5 -5 5 -.5 1])

Figure contains an axes object. The axes object contains an object of type surface.

MATLAB®은 요소 z(i,j)를 (x(j),y(i))에서의 값으로 간주하므로 코드는 meshgrid를 호출할 때 xy를 뒤바꿉니다. Curve Fitting Toolbox®는 근사 이론 표준을 따르는 반면 z(i,j)는 (x(i),y(j))에서의 값입니다.

이러한 이유로 인해, 아래에서처럼 MATLAB mesh 함수를 사용하여 이러한 이변량 스플라인의 값을 플로팅할 때는 주의를 기울여야 합니다.

xf = linspace(x(1),x(end),41); 
yf = linspace(y(1),y(end),41);
mesh(xf,yf,fnval(bcs,{xf,yf}).')

Figure contains an axes object. The axes object contains an object of type surface.

fnval로부터 얻은 값으로 구성된 행렬의 전치가 사용된 것을 주목하십시오.

입력 인수

모두 축소

피팅할 데이터 값 y로 구성된 데이터 지점으로, 벡터로 지정되거나 다변량 데이터에 대해서는 셀형 배열로 지정됩니다. 스플라인 f는 각 데이터 지점 x에 있는 매듭을 사용하여 j의 모든 값에 대해 f(x(j)) = y(:,j)가 되도록 만들어집니다.

그리딩된 다변량 데이터의 경우, 각 변수 차원 f(x1(i),x2(j),...xn(k)) = y(:,i,j,...,k)의 데이터 지점을 지정하는 셀형 배열로 x를 지정할 수 있습니다.

데이터형: single | double

스플라인 생성 중에 피팅할 데이터 값으로, 벡터, 행렬 또는 배열로 지정됩니다. 데이터 값 y(:,j)는 스칼라, 행렬 또는 n차원 배열이 될 수 있습니다. 동일한 데이터 지점 x에서 주어지는 데이터 값은 평균화됩니다.

데이터형: single | double

스플라인이 계산되는 계산 점으로, 벡터로 지정되거나 다변량 데이터에 대해서는 벡터로 구성된 셀형 배열로 지정됩니다. 스플라인 계산은 fnval을 사용하여 수행됩니다.

데이터형: single | double

출력 인수

모두 축소

ppform 형식의 스플라인으로, 다음 필드를 갖는 구조체로 반환됩니다. ppform에 대한 자세한 내용은 ppform을 참조하십시오.

스플라인 형식으로, pp로 반환됩니다. pp는 스플라인이 조각별 다항식 형식으로 주어졌음을 나타냅니다.

스플라인의 매듭 위치로, 벡터로 반환되거나 다변량 데이터에 대해서는 벡터로 구성된 셀형 배열로 반환됩니다. 벡터는 다항식 조각이 정의된 각 구간의 시작과 끝을 나타내는 순증가하는 요소를 포함합니다.

각 조각에 대한 다항식의 계수로, 행렬로 반환되거나 다변량 데이터에 대해서는 배열로 반환됩니다.

스플라인을 설명하는 다항식 조각의 개수로, 스칼라로 반환되거나 다변량 데이터에 대해서는 각 변수에 있는 조각 개수로 구성된 벡터로 반환됩니다.

스플라인의 각 다항식 조각을 설명하는 다항식 함수의 위수로, 스칼라로 반환되거나 다변량 데이터에 대해서는 각 변수의 위수를 포함하는 벡터로 반환됩니다.

대상 함수의 차원 수로, 스칼라로 반환됩니다.

계산된 스플라인으로, 벡터로 반환되거나 다변량 데이터에 대해서는 행렬 또는 배열로 반환됩니다. 스플라인은 지정된 계산 점 xx에서 계산됩니다.

알고리즘

csapiPGS의 Fortran 루틴 CUBSPL을 구현한 것입니다.

알고리즘은 MATLAB의 희소 행렬 기능을 사용하여 관련 삼중대각 선형 시스템을 생성하고 풉니다.

알고리즘은 또한 not-a-knot 끝점 조건을 사용하여 보간의 첫 번째와 두 번째 다항식 조각과 마지막에서 두 번째와 마지막 다항식 조각이 만나도록 강제합니다.

버전 내역

R2006b에 개발됨

참고 항목

| |