Main Content

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

csape

끝점 조건을 사용하는 3차 스플라인 보간

설명

pp = csape(x,y)는 주어진 데이터 (x,y)에 대한 3차 스플라인 보간을 ppform 형식으로 반환합니다. 함수는 데이터의 각 끝점에 라그랑주 끝점 조건을 적용하고, 스플라인 끝점 기울기를 각 끝점에서 마지막 4개의 데이터 점을 피팅하는 3차 다항식의 기울기와 일치시킵니다. 동일한 지점에 있는 데이터 점은 평균화됩니다.

예제

pp = csape(x,y,conds)conds로 지정된 끝점 조건을 사용합니다.

예제

pp = csape(x,[e1,y,e2],conds)conds로 지정된 끝점 조건을 사용하고 왼쪽과 오른쪽 끝점 조건 값으로 각각 e1e2를 사용합니다.

예제

pp = csape({x1,...,xn},___)은 그리딩된 데이터에 대해 일변량 메시 입력값 x1,...,xn을 사용하여 3차 스플라인 보간을 반환합니다. 이 경우 yn+r차원 배열이며 r은 각 데이터 값의 차원입니다. condsn개의 요소를 갖는 셀형 배열로, 각 n개의 변수에 대해 끝점 조건을 제공합니다. 끝점 조건에 대한 끝점 조건을 제공해야 하는 경우도 있습니다. 이 구문은 위에 열거된 구문의 인수에 사용할 수 있습니다.

예제

모두 축소

csape 함수를 사용하여 사용자 지정 끝점 조건을 구현할 수 있습니다. 가장 왼쪽 끝점 e=x(1)에서 다음과 같은 조건을 적용하려 한다고 가정하겠습니다.

λ(s)aDs(e)+bD2s(e)=c

위 조건은 지정된 스칼라 a,b, c에 대해 적용합니다. 3차 스플라인 보간 ss1(주어진 데이터의 3차 스플라인 보간을 디폴트 끝점 조건을 사용하여 계산)과 s0(0 데이터의 3차 스플라인 보간을 일부 자명하지 않은 끝점 조건을 사용하여 계산)의 합으로 계산할 수 있습니다.

s=s1+c-λ(s1)λ(s0)s0

s0에 지정하는 끝점 조건은 원하는 최종 끝점 조건 λ(s)일 필요는 없습니다.

이 예제에서는 데이터 피팅에서 사용되는 표준 데이터 세트인 티타늄 테스트 데이터를 사용합니다. titanium 함수를 사용하여 데이터를 불러옵니다.

[x,y] = titanium;

λ(s)에 대한 계수를 정의합니다.

a = -2;
b = -1;
c = 0;

끝점 조건은 데이터 세트의 가장 왼쪽 끝점에 적용됩니다.

e = x(1);

이제 끝점 조건을 적용하지 않고 데이터 세트의 3차 스플라인 보간을 계산합니다.

s1 = csape(x,y);

s0을 계산하려면 동일한 길이의 0 데이터를 y로 사용하고 추가로 자명하지 않은 끝점 조건 집합을 사용하십시오.

yZero = zeros(1,length(y));

1×2 행렬 conds는 스플라인 도함수를 고정으로 지정하여 끝점 조건을 설정합니다. 이 예제에서는 데이터의 왼쪽 끝점에만 끝점 조건을 사용하므로 conds를 사용하여 왼쪽 끝점에 있는 1계 도함수를 고정합니다. 오른쪽 끝점에서는 함수 자체의 값을 고정합니다.

conds = [1 0];

함수 또는 함수의 도함수를 고정할 값을 지정하려면 피팅을 위한 데이터 세트에 추가적인 값으로 추가하십시오. 이 경우에는 yZero입니다. 첫 번째 요소는 왼쪽 끝점에 있는 값을 지정하고 마지막 요소는 오른쪽 끝점에 있는 값을 지정합니다.

왼쪽 끝점에서, 스플라인의 1계 도함수가 값 1을 가지도록 고정합니다. 오른쪽 끝점에서, 함수 자체가 0(yZero의 마지막 요소의 원래 값)이 되도록 고정합니다. 이러한 끝점 조건 값을 yZero의 각 끝점에서 결합하고 csape를 사용하여 이러한 끝점 조건 값으로 데이터를 피팅하는 스플라인을 찾습니다.

s0 = csape(x,[1 yZero 0],conds);

앞에서 언급한 s에 대한 표현식을 사용하여 이 데이터로부터 완전 피팅된 스플라인을 계산합니다. 이렇게 하려면 스플라인 s0s1의 1계 도함수와 2계 도함수를 사용하여 λ0=λ(s0)λ1=λ(s1)에 대한 값을 계산하십시오.

d1s1 = fnder(fnbrk(s1,1));
d2s1 = fnder(d1s1);
d1s0 = fnder(fnbrk(s0,1));
d2s0 = fnder(d1s0);

끝점 조건은 데이터의 왼쪽 끝점에만 적용되므로 스플라인의 첫 번째 다항식 조각의 도함수를 계산합니다.

lam1 = a*fnval(d1s1, e) + b*fnval(d2s1,e);
lam0 = a*fnval(d1s0, e) + b*fnval(d2s0,e);

이제 λ1λ0을 사용하여 완전 피팅된 최종 스플라인을 계산합니다.

pp = fncmb(s0,(c-lam1)/lam0,s1);

스플라인을 플로팅하여 디폴트 피팅과 끝점 조건의 결과를 비교합니다.

fnplt(pp,[594, 632])
hold on
fnplt(s1,'b--',[594, 632])
plot(x,y,'ro','MarkerFaceColor','r')
hold off
axis([594, 632, 0.62, 0.655])
legend 'Desired end conditions' ...
'Default end-conditions' 'Data' ...
    Location SouthEast

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Desired end conditions, Default end-conditions, Data.

첫 번째 데이터 점 근처에 있는 정상점은 피팅에 끝점 조건이 구현되었음을 보여줍니다.

csape를 사용하여 다변량 벡터 값 데이터를 피팅합니다. 이 예제에서는 각 독립 변수에 대해 서로 다른 끝점 조건을 사용하여 벡터 값 데이터를 피팅합니다.

먼저 데이터를 정의합니다. 이 예제에서는 2차원 필드 위에 3차원 벡터 v를 정의합니다. x 방향에는 고정된 조건 또는 미리 정해진 기울기가 있고 y 방향에는 주기적 끝점 조건이 있습니다.

x = 0:4;
y = -2:2;

s2 = 1/sqrt(2);

v = zeros( 3, 7, 5 );
v(1,:,:) = [1 0 s2 1 s2 0 -1].'*[1 0 -1 0 1];
v(2,:,:) = [1 0 s2 1 s2 0 -1].'*[0 1 0 -1 0];
v(3,:,:) = [0 1 s2 0 -s2 -1 0].'*[1 1 1 1 1];

v는 좌표 x(i),y(j)에서 벡터 값 v(:,i+1,j)를 갖는 3차원 배열입니다. x 차원에 있는 2개의 추가 요소가 기울기 값을 지정합니다. 데이터 점 v(:,1,j)v(:,7,j)는 고정된 끝점 조건에 대해 선 x = 0x = 4를 따라 1계 도함수의 값을 제공합니다. y 차원에서, 주기적 끝점 조건에는 추가적인 지정이 필요하지 않습니다.

이제 csape를 사용하여 다변량 3차 스플라인 보간을 계산합니다.

sph = csape({x,y},v,{'clamped','periodic'});

결과를 플로팅하려면 먼저 적합한 구간에 대해 스플라인을 평가하십시오.

values = fnval(sph,{0:.1:4,-2:.1:2});

surf(squeeze(values(1,:,:)), ...
squeeze(values(2,:,:)), squeeze(values(3,:,:)));

axis equal
axis off

간단한 명령 fnplt(sph)를 사용하여 스플라인 곡면을 평가하고 플로팅할 수도 있습니다. v는 3차원 배열이고, v(:,i+1,j)(x(i),y(j)), i=1:5, j=1:5에서 일치되는 3-벡터입니다. 또한, conds{1}'clamped'임에 따라 size(v,2)는 5가 아닌 7이고, v(r,:,j)의 첫 번째와 마지막 요소가 끝점 기울기 값을 지정합니다.

끝점 조건에 대한 끝점 조건을 제공해야 하는 경우도 있습니다. 이 이변량 예제에서는 완전한 쌍삼차 보간을 통해 쌍삼차 다항식 g(x,y) = x3y3을 재현합니다. 그런 다음 끝점 조건을 어떻게 배치해야 하는지 쉽게 알아볼 수 있도록 끝점 조건 값을 포함하여 필요한 데이터를 g로부터 직접 도출합니다. 마지막으로, 결과를 확인합니다.

sites = {[0 1],[0 2]}; coefs = zeros(4, 4); coefs(1,1) = 1;
g = ppmak(sites,coefs);
Dxg = fnval(fnder(g,[1 0]),sites);
Dyg = fnval(fnder(g,[0 1]),sites);
Dxyg = fnval(fnder(g,[1 1]),sites);

f = csape(sites,[Dxyg(1,1),   Dxg(1,:),    Dxyg(1,2); ...
                 Dyg(:,1), fnval(g,sites), Dyg(:,2) ; ...
                 Dxyg(2,1),   Dxg(2,:),    Dxyg(2,2)], ...
                                          {'complete','complete'});
if any(squeeze(fnbrk(f,'c'))-coefs)
    disp( 'this is wrong' )
end

입력 인수

모두 축소

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

그리딩된 다변량 데이터의 경우, s(x1(i),x2(j),...,xn(k)) = y(:,i,j,...,k)가 되도록 각 변수 차원의 데이터 지점을 제공하는 셀형 배열로 x를 지정합니다.

데이터형: single | double

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

데이터형: single | double

스플라인에 대한 끝점 조건으로, 'complete' 또는 'clamped', 'not-a-knot', 'periodic', 'second', 'variational' 또는 1×2 행렬로 지정됩니다. conds에 대한 미리 정의된 옵션은 데이터의 각 끝점에 동일한 끝점 조건을 적용합니다. conds를 1×2 행렬로 제공하여 각 끝점에 서로 다른 끝점 조건을 지정할 수 있습니다.

사용 가능한 미리 정의된 끝점 조건은 다음과 같습니다.

'complete' 또는 'clamped'

끝점 기울기를 주어진 값 e1e2로 일치시킵니다. e1e2에 대한 값을 제공하지 않으면 이 옵션은 디폴트 라그랑주 끝점 조건을 일치시킵니다.

'not-a-knot'

두 번째 지점과 마지막에서 두 번째 지점을 비활성 매듭으로 만듭니다. 이 옵션은 e1e2에 대해 제공한 모든 값을 무시합니다.

'periodic'

왼쪽 끝점에 있는 1계 도함수 및 2계 도함수를 오른쪽 끝점에 있는 1계 도함수 및 2계 도함수와 일치시킵니다.

'second'

끝점 2계 도함수를 주어진 값 e1e2로 일치시킵니다. 값 e1e2를 제공하지 않으면 이 옵션은 두 도함수에 대해 디폴트 값 0을 사용합니다. 디폴트 값을 사용하는 경우 이 옵션은 'variational'과 같아집니다.

'variational'

끝점 2계 도함수를 0으로 설정합니다. 이 옵션은 e1e2에 대해 제공한 모든 값을 무시합니다.

각 끝점에 서로 다른 끝점 조건을 지정하려면 conds를 1×2 행렬로 제공하십시오. 이 행렬의 요소들은 끝점 조건으로 고정된 스플라인 도함수의 위수를 지정합니다. conds(j) = i로 설정하면 i번째 도함수 Dis가 끝점 조건 값으로 고정됩니다.

디폴트 끝점 조건 값은 conds(1) = 1인 경우 왼쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0입니다. e1e2를 지정하여 각각 데이터의 왼쪽과 오른쪽에 대한 끝점 조건 값을 설정합니다.

conds(j)의 값은 0, 1 또는 2로 지정할 수 있습니다. 다른 값을 지정하거나 conds(j)를 지정하지 않을 경우 conds(j)1이고 여기에 해당하는 끝점 조건 값은 디폴트 값입니다.

사용 가능한 미리 정의된 끝점 조건은 다음과 같습니다.

clamped

Ds(e) = ej

if conds(j) == 1

curved

D2s(e) = ej

if conds(j) == 2

periodic

Drs(a) = Drs(b), r = 1,2

if conds == [0 0]

variational

D2s(e) = 0

if conds(j) == 2 & ej == 0

e, a, b는 왼쪽 또는 오른쪽 데이터 위치를 가리키고, ej는 데이터의 왼쪽 끝점에 대해 e1이고 데이터의 오른쪽 끝점에 대해 e2입니다.

conds에 대해 미리 정의된 옵션과 사용자 정의 옵션 중 어느 것을 사용하든 선택적 끝점 조건 값 e1e2를 제공할 수 있습니다. 그러나 conds에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.

예: 'clamped', [1 0]

스플라인에 대한 왼쪽 끝점 조건 값으로, 스칼라 값으로 지정됩니다. e1은 데이터의 왼쪽 끝점에 있는 i계 도함수에 대한 값을 지정합니다. 여기서 i는 conds가 제공합니다. 양 끝점에서 서로 다른 끝점 조건을 사용하는 경우에도 한쪽 끝점에 끝점 조건을 제공한 경우에는 다른 끝점에도 끝점 조건을 제공해야 합니다.

conds에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.

e1에 대한 디폴트 값은 conds(1) = 1인 경우 왼쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0입니다.

데이터형: single | double

스플라인에 대한 오른쪽 끝점 조건 값으로, 스칼라 값으로 지정됩니다. e2는 데이터의 오른쪽 끝점에 있는 i계 도함수에 대한 값을 지정합니다. 여기서 i는 conds가 제공합니다. 양 끝점에서 서로 다른 끝점 조건을 사용하는 경우에도 한쪽 끝점에 끝점 조건을 제공한 경우에는 다른 끝점에도 끝점 조건을 제공해야 합니다.

conds에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.

e2에 대한 디폴트 값은 conds(2) = 1인 경우 오른쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0입니다.

데이터형: single | double

출력 인수

모두 축소

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

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

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

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

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

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

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

알고리즘

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

csape 명령은 PGS의 Fortran 루틴 CUBSPL의 훨씬 확장된 버전에 대해 호출합니다.

참고 항목

| |

R2006a 이전에 개발됨