이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
csape
끝점 조건을 사용하는 3차 스플라인 보간
설명
예제
csape
로 사용자 지정 끝점 조건 사용하기
csape
함수를 사용하여 사용자 지정 끝점 조건을 구현할 수 있습니다. 가장 왼쪽 끝점 x(1)
에서 다음과 같은 조건을 적용하려 한다고 가정하겠습니다.
위 조건은 지정된 스칼라 ,, 에 대해 적용합니다. 3차 스플라인 보간 는 (주어진 데이터의 3차 스플라인 보간을 디폴트 끝점 조건을 사용하여 계산)과 (0 데이터의 3차 스플라인 보간을 일부 자명하지 않은 끝점 조건을 사용하여 계산)의 합으로 계산할 수 있습니다.
에 지정하는 끝점 조건은 원하는 최종 끝점 조건 일 필요는 없습니다.
이 예제에서는 데이터 피팅에서 사용되는 표준 데이터 세트인 티타늄 테스트 데이터를 사용합니다. titanium
함수를 사용하여 데이터를 불러옵니다.
[x,y] = titanium;
에 대한 계수를 정의합니다.
a = -2; b = -1; c = 0;
끝점 조건은 데이터 세트의 가장 왼쪽 끝점에 적용됩니다.
e = x(1);
이제 끝점 조건을 적용하지 않고 데이터 세트의 3차 스플라인 보간을 계산합니다.
s1 = csape(x,y);
을 계산하려면 동일한 길이의 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);
앞에서 언급한 에 대한 표현식을 사용하여 이 데이터로부터 완전 피팅된 스플라인을 계산합니다. 이렇게 하려면 스플라인 과 의 1계 도함수와 2계 도함수를 사용하여 과 에 대한 값을 계산하십시오.
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);
이제 과 을 사용하여 완전 피팅된 최종 스플라인을 계산합니다.
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
첫 번째 데이터 점 근처에 있는 정상점은 피팅에 끝점 조건이 구현되었음을 보여줍니다.
다변량 데이터 피팅하기
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 = 0
과 x = 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
입력 인수
x
— 데이터 지점
벡터 | 셀형 배열
피팅할 데이터 값 y
로 구성된 데이터 지점으로, 벡터로 지정되거나 다변량 데이터에 대해서는 셀형 배열로 지정됩니다. 함수는 모든 j
에 대해 s(x(j)
) = y(:,j)
가 되도록 각 데이터 지점 x
에서 스플라인 s 매듭을 만듭니다.
그리딩된 다변량 데이터의 경우, s(x1(i),x2(j),...,xn(k)
) = y(:,i,j,...,k)
가 되도록 각 변수 차원의 데이터 지점을 제공하는 셀형 배열로 x
를 지정합니다.
데이터형: single
| double
y
— 피팅할 데이터 값
벡터 | 행렬 | 배열
스플라인 생성 중에 피팅할 데이터 값으로, 벡터, 행렬 또는 배열로 지정됩니다. 데이터 값 y(:,j)
는 스칼라, 행렬 또는 n차원 배열로 지정할 수 있습니다. 동일한 데이터 지점 x
에서 주어지는 데이터 값은 평균화됩니다.
데이터형: single
| double
conds
— 끝점 조건
'clamped'
| 'complete'
| 'not-a-knot'
| 'periodic'
| 'second'
| 'variational'
| 1×2 행렬
스플라인에 대한 끝점 조건으로, 'complete'
또는 'clamped'
, 'not-a-knot'
, 'periodic'
, 'second'
, 'variational'
또는 1×2 행렬로 지정됩니다. conds
에 대한 미리 정의된 옵션은 데이터의 각 끝점에 동일한 끝점 조건을 적용합니다. conds
를 1×2 행렬로 제공하여 각 끝점에 서로 다른 끝점 조건을 지정할 수 있습니다.
사용 가능한 미리 정의된 끝점 조건은 다음과 같습니다.
| 끝점 기울기를 주어진 값 |
| 두 번째 지점과 마지막에서 두 번째 지점을 비활성 매듭으로 만듭니다. 이 옵션은 |
| 왼쪽 끝점에 있는 1계 도함수 및 2계 도함수를 오른쪽 끝점에 있는 1계 도함수 및 2계 도함수와 일치시킵니다. |
| 끝점 2계 도함수를 주어진 값 |
| 끝점 2계 도함수를 0으로 설정합니다. 이 옵션은 |
각 끝점에 서로 다른 끝점 조건을 지정하려면 conds
를 1×2 행렬로 제공하십시오. 이 행렬의 요소들은 끝점 조건으로 고정된 스플라인 도함수의 위수를 지정합니다. conds(j) = i
로 설정하면 i번째 도함수 Dis가 끝점 조건 값으로 고정됩니다.
디폴트 끝점 조건 값은 conds(1) = 1
인 경우 왼쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0
입니다. e1
과 e2
를 지정하여 각각 데이터의 왼쪽과 오른쪽에 대한 끝점 조건 값을 설정합니다.
conds(j)
의 값은 0
, 1
또는 2
로 지정할 수 있습니다. 다른 값을 지정하거나 conds(j)
를 지정하지 않을 경우 conds(j)
는 1
이고 여기에 해당하는 끝점 조건 값은 디폴트 값입니다.
사용 가능한 미리 정의된 끝점 조건은 다음과 같습니다.
clamped | Ds(e) = |
|
curved | D2s(e) = |
|
periodic | Drs(a) = Drs(b), r = 1,2 |
|
variational | D2s(e) = 0 |
|
e, a, b는 왼쪽 또는 오른쪽 데이터 위치를 가리키고, ej
는 데이터의 왼쪽 끝점에 대해 e1
이고 데이터의 오른쪽 끝점에 대해 e2
입니다.
conds
에 대해 미리 정의된 옵션과 사용자 정의 옵션 중 어느 것을 사용하든 선택적 끝점 조건 값 e1
과 e2
를 제공할 수 있습니다. 그러나 conds
에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.
예: 'clamped'
, [1 0]
e1
— 왼쪽 끝점 조건 값
스칼라
스플라인에 대한 왼쪽 끝점 조건 값으로, 스칼라 값으로 지정됩니다. e1
은 데이터의 왼쪽 끝점에 있는 i계 도함수에 대한 값을 지정합니다. 여기서 i는 conds
가 제공합니다. 양 끝점에서 서로 다른 끝점 조건을 사용하는 경우에도 한쪽 끝점에 끝점 조건을 제공한 경우에는 다른 끝점에도 끝점 조건을 제공해야 합니다.
conds
에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.
e1
에 대한 디폴트 값은 conds(1) = 1
인 경우 왼쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0
입니다.
데이터형: single
| double
e2
— 오른쪽 끝점 조건 값
스칼라
스플라인에 대한 오른쪽 끝점 조건 값으로, 스칼라 값으로 지정됩니다. e2
는 데이터의 오른쪽 끝점에 있는 i계 도함수에 대한 값을 지정합니다. 여기서 i는 conds
가 제공합니다. 양 끝점에서 서로 다른 끝점 조건을 사용하는 경우에도 한쪽 끝점에 끝점 조건을 제공한 경우에는 다른 끝점에도 끝점 조건을 제공해야 합니다.
conds
에 대한 몇몇 미리 정의된 옵션은 사용자가 제공하는 끝점 조건 값을 무시합니다.
e2
에 대한 디폴트 값은 conds(2) = 1
인 경우 오른쪽 4개 지점에 있는 3차 보간의 도함수이고 그렇지 않은 경우 0
입니다.
데이터형: single
| double
출력 인수
pp
— ppform 형식의 스플라인
스플라인 구조체
ppform 형식의 스플라인으로, 다음 필드를 갖는 구조체로 반환됩니다.
Form
— 스플라인 형식
pp
스플라인 형식으로, pp
로 반환됩니다. pp
는 스플라인이 조각별 다항식 형식으로 주어졌음을 나타냅니다.
Breaks
— 스플라인의 매듭 위치
벡터 | 셀형 배열
스플라인의 매듭 위치로, 벡터로 반환되거나 다변량 데이터에 대해서는 벡터로 구성된 셀형 배열로 반환됩니다. 벡터는 다항식 조각이 정의된 각 구간의 시작과 끝을 나타내는 순증가하는 요소를 포함합니다.
Coefs
— 다항식의 계수
행렬 | 배열
각 조각에 대한 다항식의 계수로, 행렬로 반환되거나 다변량 데이터에 대해서는 배열로 반환됩니다.
Pieces
— 다항식 조각의 개수
스칼라 | 벡터
스플라인을 설명하는 다항식 조각의 개수로, 스칼라로 반환되거나 다변량 데이터에 대해서는 각 변수에 있는 조각 개수로 구성된 벡터로 반환됩니다.
Order
— 다항식의 위수
스칼라 | 벡터
스플라인의 각 다항식 조각을 설명하는 다항식 함수의 위수로, 스칼라로 반환되거나 다변량 데이터에 대해서는 각 변수의 위수를 포함하는 벡터로 반환됩니다.
Dim
— 차원 수
스칼라
대상 함수의 차원 수로, 스칼라로 반환됩니다.
알고리즘
관련 삼중대각 선형 시스템은 MATLAB®의 희소 행렬 기능을 사용하여 생성하고 풉니다.
csape
명령은 PGS의 Fortran 루틴 CUBSPL
의 훨씬 확장된 버전에 대해 호출합니다.
버전 내역
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)