Main Content

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

csaps

3차 평활화 스플라인

설명

참고

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

pp = csaps(x,y)는 주어진 데이터 (x,y)에 대한 3차 평활화 스플라인 보간을 ppform 형식으로 반환합니다. 데이터 지점 x(j)에서 스플라인 f의 값은 j = 1:length(x)에 대한 데이터 값 y(:,j)를 근사합니다.

평활화 스플라인 f는 다음을 최소화합니다.

pj=1nwj|yjf(xj)|2error measure+(1p)λ(t)|D2f(t)|2dtroughness measure

여기서 n은 x 요소의 개수이고 적분은 x의 모든 요소를 포함하는 가장 작은 구간에 대해 이루어집니다. yj와 xj는 각각 yx의 j번째 요소를 가리킵니다. D2f는 함수 f의 2계 도함수를 나타냅니다.

오차 측도 가중치 wj의 디폴트 값은 1입니다. 거칠기 측도의 조각별 상수 가중치 함수 λ의 디폴트 값은 상수 함수 1입니다. 기본적으로 csaps는 주어진 데이터 지점 x를 기준으로 평활화 파라미터 p에 대한 값을 선택합니다.

기본 구간 밖에서 평활화 스플라인의 값을 구하려면 먼저 스플라인을 외삽해야 합니다. 데이터 지점에 의해 정해진 구간 밖에서 2계 도함수가 반드시 0이 되도록 하려면 pp = fnxtr(pp)를 사용하십시오.

예제

pp = csaps(x,y,p)는 평활화 파라미터 p를 지정합니다. p를 구간 (x(i-1),x(i))에서 첫 번째 요소가 p이고 i번째 요소가 λ의 값인 벡터로 제공하여 거칠기 측도 가중치 λ를 제공할 수도 있습니다.

예제

pp = csaps(x,y,p,[],w)는 오차 측도에 가중치 w도 지정합니다.

예제

values = csaps(x,y,p,xx)는 평활화 파라미터 p를 사용하고, 점 xx에서 계산된 평활화 스플라인의 값을 반환합니다. 이 구문은 fnval(csaps(x,y,p),xx)와 동일합니다.

values = csaps(x,y,p,xx,w)는 평활화 파라미터 p와 오차 측도 가중치 w를 사용하고, 점 xx에서 계산된 평활화 스플라인의 값을 반환합니다. 이 구문은 fnval(csaps(x,y,p,[],w),xx)와 동일합니다.

[___] = csaps({x1,...,xm},y,___){x1,...,xm}으로 설명되는 사각 그리드에 있는 데이터에 대해 m-변량 텐서 곱 평활화 스플라인의 ppform을 제공합니다. 이 구문은 위에 열거된 구문의 인수에 사용할 수 있습니다.

예제

[___,P] = csaps(___)p 지정 여부와 관계없이, 최종 스플라인 결과에서 사용되는 평활화 파라미터의 값도 반환합니다. 이 구문은 [pp,P] = csaps(x,y)로 시작해서 p에 대한 합리적인 첫 번째 추측을 얻을 수 있는 실험에서 유용합니다.

예제

모두 축소

csaps 함수에 평활화 파라미터 p를 여러 다른 값으로 사용하여 평활화 스플라인을 피팅합니다. p의 값으로 극값 0과 1 사이의 값을 사용하여 피팅된 스플라인의 형태와 근접도에 어떤 영향을 주는지 살펴봅니다.

티타늄 데이터 세트를 불러옵니다.

[x, y] = titanium();

p = 0일 경우, s0은 데이터에 대한 최소제곱 직선 피팅입니다. p = 1일 경우, s1은 변분(자연) 3차 스플라인 보간입니다.

0 < p < 1일 경우, sp는 두 극값 사이의 상호 절충, 즉 보간 s1보다 매끄럽도록 하거나 직선 s0보다 데이터에 가깝도록 하는 두 경우를 절충하는 평활화 스플라인입니다.

p = 0.00009;

s0 = csaps(x,y,0);
sp = csaps(x,y,p);
s1 = csaps(x,y,1);
figure
fnplt(s0);
hold on
fnplt(sp);
fnplt(s1);
plot(x,y,'ko');
hold off
title('Smoothing splines with different values for p');
legend('p = 0', ['p = ' num2str( p )], 'p = 1', 'Location', 'northwest')

Figure contains an axes object. The axes object with title Smoothing splines with different values for p contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent p = 0, p = 9e-05, p = 1.

평활화 파라미터, 오차 측도 가중치와 거칠기 측도 가중치를 조정합니다.

잡음이 있는 사인 곡선을 만듭니다.

x = linspace(0,2*pi,21); y = sin(x)+(rand(1,21)-.5)*.3;

데이터에 평활화 스플라인을 피팅합니다. 평활화 파라미터 p = 0.4와 데이터에 대해 변동되는 오차 측도 가중치 w를 지정합니다.

pp = csaps(x,y,0.4,[],[ones(1,10),repmat(5,1,10), 0]);

함수는 잡음이 있는 데이터에 대해 오른쪽 절반이 데이터에 훨씬 가까운 매끄러운 피팅을 반환합니다. 이는 오른쪽 절반의 오차 측도 가중치가 훨씬 크기 때문입니다. 마지막 데이터 점에 대한 오차 가중치 0 때문에 이 점은 피팅에서 제외됩니다.

이제 동일한 데이터, 평활화 파라미터 및 오차 측도 가중치를 사용하되 거칠기 측도 가중치는 조정한 상태로 평활화 스플라인을 피팅합니다.

pp1 = csaps(x,y, [.4,ones(1,10),repmat(.2,1,10)], [], ...
                    [ones(1,10), repmat(5,1,10), 0]);

거칠기 측도 가중치는 구간의 오른쪽 절반에서 0.2밖에 되지 않습니다. 이에 대응하여, 데이터의 오른쪽 절반에서 피팅이 보다 거칠지만 보다 가깝습니다(무시되는 마지막 데이터 점 제외).

비교를 위해 두 피팅을 모두 플로팅합니다.

figure
hold on
fnplt(pp, 'b'); 
fnplt(pp1,'r--')
plot(x,y,'ok')
hold off
ylim([-1.5 1.5])
title(['Cubic smoothing spline, with right half treated ',...
          'differently'])
legend('Larger error weight', 'Larger error and smaller roughness weight')

Figure contains an axes object. The axes object with title Cubic smoothing spline, with right half treated differently contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Larger error weight, Larger error and smaller roughness weight.

peaks 함수로 균일 잡음이 추가된 이변량 데이터를 생성하여 평활화 스플라인을 피팅합니다. csaps를 사용하여 새로운 평활화된 데이터 점과 csaps가 피팅에 대해 정하는 평활화 파라미터를 구합니다.

그리드를 만듭니다. 이 예제에서 그리드는 51×61의 균일한 그리드입니다.

x = {linspace(-2,3,51),linspace(-3,3,61)};
[xx,yy] = ndgrid(x{1},x{2}); 

peaks 함수와 구간 [-12,12]의 난수를 사용하여 잡음이 있는 데이터를 생성합니다.

y = peaks(xx, yy);
noisy = y + (rand(size(y)) - 0.5);
figure
surf(xx,yy,noisy)
axis off

데이터에 피팅합니다. csaps를 사용하여 그리드 x에 대해 계산된 평활화된 데이터 값과 피팅에 사용된 디폴트 평활화 파라미터를 구합니다.

[sval,p] = csaps(x,noisy,[],x);

피팅의 플롯을 보면 거친 부분이 어느 정도 남아 있음을 알 수 있습니다. 배열 sval은 전치해야 합니다.

figure
surf(x{1},x{2},sval.')
axis off

보다 매끄러운 근사를 위해, p에 대해 csaps 디폴트 값보다 약간 작은 값을 지정합니다.

ssval = csaps(x,noisy,.996,x);
figure
surf(x{1},x{2},ssval.')
axis off

입력 인수

모두 축소

피팅할 데이터 값 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

평활화 파라미터로, 0과 1 사이의 스칼라 값으로 지정되거나 다변량 데이터에 대해서는 값으로 구성된 셀형 배열로 지정됩니다. p를 벡터로 제공하여 거칠기 측도 가중치 λ에 대한 값을 지정할 수도 있습니다. 다변량 데이터에 대해 거칠기 측도 가중치를 제공하려면 벡터로 구성된 셀형 배열을 사용하십시오. 빈 배열을 제공할 경우 함수는 데이터 지점 x와 거칠기 측도 가중치 λ의 디폴트 값 1을 기준으로 p의 디폴트 값을 선택합니다.

평활화 파라미터는 f가 매끄러워야 한다는 것과 f가 데이터에 가까워야 한다는 상충되는 요구에 적용할 상대 가중치를 결정합니다. p = 0일 경우, f는 데이터에 대한 최소제곱 직선 피팅입니다. p = 1일 경우, f는 변분(자연) 3차 스플라인 보간입니다. p가 0부터 1까지 움직임에 따라 평활화 스플라인은 하나의 극값에서 다른 극값으로 바뀝니다.

p에 대한 적합한 범위는 1/(1 + h3/6)에 가까운 경우가 많습니다. 여기서 h는 데이터 지점들 간의 평균 간격입니다. 함수는 이 범위 내에서 p의 디폴트 값을 선택합니다. 균일한 간격을 갖는 데이터의 경우, p = 1(1 + h3/60)으로 근접한 피팅을 얻고 p = 1/(1 + h3/0.6)으로 만족스러운 평활화를 얻을 거라 예상할 수 있습니다. p > 1을 입력할 수 있지만, 이렇게 하면 변분 3차 스플라인 보간보다도 거친 평활화 스플라인을 얻게 됩니다.

입력값 p가 음수이거나 비어 있으면 함수는 p에 대해 디폴트 값을 사용합니다.

p를 벡터로 제공하여 평활화 파라미터와 함께 거칠기 측도 가중치 λ를 지정할 수도 있습니다. 이 벡터는 x와 크기가 같아야 하며, i = 2:length(x)에 대해 구간 (x(i-1)...x(i))에서 i번째 요소의 값이 λ여야 합니다. 입력 벡터 p의 첫 번째 요소가 평활화 파라미터 p의 원하는 값입니다. 거칠기 측도 가중치를 제공함으로써 결과로 생성되는 평활화 스플라인을 (가중치 값을 크게 하여) 더 매끄럽게 만들거나 (가중치 값을 작게 하여) 구간의 여러 부분에서 데이터에 더 가깝게 만들 수 있습니다. 거칠기 측도 가중치는 음수가 아니어야 합니다.

p는 선택하기 어려운데 y에 있는 잡음의 크기는 대략적으로 정할 수 있는 경우, 대신 spaps(x,y,tol)을 사용하십시오. 이 함수는 오차 측도가 tol을 초과하면 안 된다는 조건하에서 거칠기 측도를 가능한 한 작게 만드는 p를 선택합니다. 이 경우 오차 측도는 보통 tol에 대해 지정된 값과 동일합니다.

데이터형: single | double

오차 측도의 오차 측도 가중치 w로, x와 같은 크기를 갖는, 음수가 아닌 요소로 구성된 벡터로 지정됩니다.

오차 측도의 가중 벡터 w의 디폴트 값은 ones(size(x))입니다.

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

데이터형: single | double

출력 인수

모두 축소

ppform 형식의 스플라인으로, 다음 필드를 갖는 구조체로 반환됩니다.

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

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

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

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

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

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

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

스플라인을 계산하는 데 사용되는 평활화 파라미터로, 스칼라로 반환되거나 다변량 데이터에 대해서는 스칼라 값으로 구성된 셀형 배열로 반환됩니다. P01 사이입니다.

알고리즘

csapsPGS의 Fortran 루틴 SMOOTH를 구현한 것입니다.

평활화 스플라인을 계산하려면 계수 행렬이 p*A + (1-p)*B의 형식을 갖고 행렬 AB가 데이터 지점 x에 따라 달라지는 선형 시스템을 풀어야 합니다. p의 디폴트 값을 사용하면 p*trace(A)(1-p)*trace(B)와 같아집니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| |