Main Content

spline

3차 스플라인 데이터 보간

설명

예제

s = spline(x,y,xq)xq의 쿼리 점에 대응하는 보간된 값으로 구성된 벡터 s를 반환합니다. s의 값은 xy의 3차 스플라인 보간에 의해 결정됩니다.

예제

pp = spline(x,y)ppval 및 스플라인 유틸리티 unmkpp와 함께 사용하기 위한 조각별 다항식 구조체를 반환합니다.

예제

모두 축소

spline을 사용하여 균일하지 않은 간격의 샘플 점에서 사인 곡선을 보간합니다.

x = [0 1 2.5 3.6 5 7 8.1 10];
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

끝점 기울기가 알려진 경우 경사를 고정시킨 완전한 스플라인 보간을 사용합니다. 이를 위해 시작 부분과 끝부분에 각각 하나씩 두 개의 추가 요소를 가진 값 벡터 y를 지정하여 끝점 기울기를 정의할 수 있습니다.

데이터로 구성된 벡터 y를 만들고 데이터의 x 좌표를 갖는 또 다른 벡터를 만듭니다.

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];

spline을 사용하여 데이터를 보간하고 결과를 플로팅합니다. 두 개의 값이 추가된 [0 y 0]을 두 번째 입력값을 지정하여 끝점 기울기가 모두 0이 되도록 합니다. ppval을 사용하여 보간 구간 내의 101개 점에서 스플라인 피팅의 값을 구합니다.

cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

데이터 세트를 외삽하여 인구 증가를 예측합니다.

1900년부터 1990년까지의(t) 인구 조사와 대응하는 미국 인구 수(p)를 표현하는(단위: 백만 명) 두 개의 벡터를 생성합니다.

t = 1900:10:1990;
p = [ 75.995  91.972  105.711  123.203  131.669 ...
     150.697 179.323  203.212  226.505  249.633 ];

3차 스플라인을 사용하여 2000년의 인구를 외삽하고 예측합니다.

spline(t,p,2000)
ans = 270.6060

원의 플롯을 o로 표시된 5개의 데이터 점 y(:,2),...,y(:,6)과 함께 생성합니다. 행렬 y에는 x보다 두 개 더 많은 열이 포함되어 있습니다. 따라서, spliney(:,1)y(:,end)를 끝점 기울기로 사용합니다. 원은 점 (1,0)에서 시작하고 끝나기 때문에, 점 (1,0)이 두 번 플로팅됩니다.

x = pi*[0:.5:2]; 
y = [0  1  0 -1  0  1  0; 
     1  0  1  0 -1  0  1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or')
axis equal

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

스플라인을 사용하여 미세한 메시를 통해 함수를 샘플링합니다.

0과 1 사이의 몇 개 값에 대해 사인 곡선과 코사인 곡선을 생성합니다. 스플라인 보간을 사용하여 미세한 메시를 통해 함수를 샘플링합니다.

x = 0:.25:1;
Y = [sin(x); cos(x)];
xx = 0:.1:1;
YY = spline(x,Y,xx);
plot(x,Y(1,:),'o',xx,YY(1,:),'-')
hold on
plot(x,Y(2,:),'o',xx,YY(2,:),':')
hold off

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

두 개의 다른 데이터 세트에 대해 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')

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Sample Points, pchip, spline, makima.

이 경우, pchipmakima는 오버슈트를 피하고 평탄 영역을 정확하게 연결할 수 있다는 점에서 비슷하게 동작합니다.

진동 샘플 함수를 사용하여 두 번째 비교를 수행합니다.

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')

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Sample Points, pchip, spline, makima.

기본 함수가 진동 함수인 경우 국소 극값 근처에서 과감하게 평탄화되는 pchip보다 splinemakima가 점 사이의 움직임을 포착하는 능력이 더 우수합니다

입력 인수

모두 축소

x 좌표로, 벡터로 지정됩니다. 벡터 x는 데이터 y가 주어지는 점을 지정합니다. x의 요소는 유일해야 합니다.

데이터형: single | double

x 좌표에서의 함수 값으로, 숫자형 벡터, 행렬 또는 배열로 지정됩니다. xy는 대개 길이가 같지만, y는 끝점 기울기를 지정하기 위해 x보다 요소를 정확히 두 개 더 가질 수도 있습니다.

y가 행렬이나 배열인 경우 마지막 차원의 값 y(:,...,:,j)x와 일치시킬 값으로 간주됩니다. 이 경우, y의 마지막 차원은 x와 길이가 동일하거나 요소를 정확히 두 개 더 가져야 합니다.

3차 스플라인의 끝점 기울기는 다음 규칙을 따릅니다.

  • xy가 동일한 크기의 벡터인 경우, not-a-knot 끝점 조건이 사용됩니다.

  • xy가 스칼라인 경우, 다른 항목과 동일한 길이를 갖도록 확장된 다음 not-a-knot 끝점 조건이 사용됩니다.

  • yx가 가진 항목보다 2개 이상 더 많은 값을 가진 벡터인 경우, spliney의 처음과 마지막 값을 3차 스플라인에 대한 끝점 기울기로 사용합니다. 예를 들어, y가 벡터인 경우,

    • y(2:end-1)x에 있는 각 점에서의 함수 값을 제공합니다.

    • y(1)min(x)에 있는 구간 시작 부분에서의 기울기를 제공합니다.

    • y(end)max(x)에 있는 구간 끝부분에서의 기울기를 제공합니다.

  • 마찬가지로 y가 행렬이거나 length(x)+2와 동일한 size(y,N)N차원 배열인 경우,

    • y(:,...,:,j+1)j = 1:length(x)에 대해 x에 있는 각 점에서의 함수 값을 제공합니다.

    • y(:,:,...:,1)min(x)에 있는 구간 시작 부분에서의 기울기를 제공합니다.

    • y(:,:,...:,end)max(x)에 있는 구간 끝부분에서의 기울기를 제공합니다.

데이터형: single | double

쿼리 점으로, 스칼라, 벡터, 행렬 또는 배열로 지정됩니다. xq에 지정된 점은 spline이 계산하는 보간된 함수 값 yq의 x 좌표입니다.

데이터형: single | double

출력 인수

모두 축소

쿼리 점에서 보간된 값으로, 스칼라, 벡터, 행렬 또는 배열로 반환됩니다.

s의 크기는 다음과 같이 yxq의 크기와 관련이 있습니다.

  • y가 벡터인 경우, sxq와 크기가 동일합니다.

  • y가 크기 Ny = size(y)로 구성된 배열인 경우, 다음 조건이 적용됩니다.

    • xq가 스칼라나 벡터인 경우, size(s)[Ny(1:end-1) length(xq)]를 반환합니다.

    • xq가 배열인 경우 size(s)[Ny(1:end-1) size(xq)]를 반환합니다.

조각별 다항식으로, 구조체로 반환됩니다. 이 구조체를 ppval 함수와 함께 사용하여 한 개 이상의 쿼리 점에서 조각별 다항식의 값을 계산합니다. 이 구조체는 다음 필드를 가집니다.

필드설명
form

조각별 다항식의 경우 'pp'

breaks

L 구간의 시작과 끝에 해당하는 순증가하는 요소가 포함된, 길이가 L+1인 벡터

coefs

각 행 coefs(i,:)i번째 구간 [breaks(i),breaks(i+1)]k차 다항식의 로컬 계수가 포함된 L×k 행렬

pieces

구간 조각의 개수, L

order

다항식의 차수

dim

대상의 차원

coefs의 다항식 계수는 각 구간의 로컬 계수이기 때문에, 이 계수를 일반적인 다항 방정식에서 사용하려면 대응하는 매듭 구간의 아래쪽 끝점을 빼야 합니다. 즉, 구간 [x1,x2]에서 계수 [a,b,c,d]에 대해, 대응하는 다항식은 다음과 같습니다.

f(x)=a(xx1)3+b(xx1)2+c(xx1)+d.

  • 스플라인 보간은 interp1 함수를 명령 interp1(x,y,xq,'spline')와 같이 사용해 수행할 수도 있습니다. spline은 입력 행렬의 행에서 보간을 수행하는 반면 interp1은 입력 행렬의 열에서 보간을 수행합니다.

알고리즘

스플라인 보간을 구성하는 다양한 3차 다항식 계수를 설명하는 데 필요한 정보를 제공하기 위해 삼중대각 선형 시스템(우변이 여럿일 수 있음)을 풉니다. spline은 함수 ppval, mkpp, unmkpp를 사용합니다. 이러한 루틴은 조각별 다항식으로 작업하는 소규모 함수 스위트를 형성합니다. 더 많은 고급 기능에 액세스하려면 interp1 또는 Curve Fitting Toolbox™ 스플라인 함수를 참조하십시오.

참고 문헌

[1] de Boor, Carl. A Practical Guide to Splines. Springer-Verlag, New York: 1978.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |