이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
spline
3차 스플라인 데이터 보간
설명
예제
사인 데이터의 스플라인 보간
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)
지정된 끝점 기울기를 사용한 스플라인 보간
끝점 기울기가 알려진 경우 경사를 고정시킨 완전한 스플라인 보간을 사용합니다. 이를 위해 시작 부분과 끝부분에 각각 하나씩 두 개의 추가 요소를 가진 값 벡터 를 지정하여 끝점 기울기를 정의할 수 있습니다.
데이터로 구성된 벡터 를 만들고 데이터의 좌표를 갖는 또 다른 벡터를 만듭니다.
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),'-');
3차 스플라인을 사용한 외삽
데이터 세트를 외삽하여 인구 증가를 예측합니다.
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
보다 두 개 더 많은 열이 포함되어 있습니다. 따라서, spline
은 y(:,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
사인 데이터와 코사인 데이터의 스플라인 보간
스플라인을 사용하여 미세한 메시를 통해 함수를 샘플링합니다.
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
spline
, pchip
, makima
를 사용한 데이터 보간
두 개의 다른 데이터 세트에 대해 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')
이 경우, pchip
과 makima
는 오버슈트를 피하고 평탄 영역을 정확하게 연결할 수 있다는 점에서 비슷하게 동작합니다.
진동 샘플 함수를 사용하여 두 번째 비교를 수행합니다.
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')
기본 함수가 진동 함수인 경우 국소 극값 근처에서 과감하게 평탄화되는 pchip
보다 spline
과 makima
가 점 사이의 움직임을 포착하는 능력이 더 우수합니다
입력 인수
x
— x 좌표
벡터
x 좌표로, 벡터로 지정됩니다. 벡터 x
는 데이터 y
가 주어지는 점을 지정합니다. x
의 요소는 유일해야 합니다.
데이터형: single
| double
y
— x 좌표에서의 함수 값
벡터 | 행렬 | 배열
x 좌표에서의 함수 값으로, 숫자형 벡터, 행렬 또는 배열로 지정됩니다. x
와 y
는 대개 길이가 같지만, y
는 끝점 기울기를 지정하기 위해 x
보다 요소를 정확히 두 개 더 가질 수도 있습니다.
y
가 행렬이나 배열인 경우 마지막 차원의 값 y(:,...,:,j)
는 x
와 일치시킬 값으로 간주됩니다. 이 경우, y
의 마지막 차원은 x
와 길이가 동일하거나 요소를 정확히 두 개 더 가져야 합니다.
3차 스플라인의 끝점 기울기는 다음 규칙을 따릅니다.
x
와y
가 동일한 크기의 벡터인 경우, not-a-knot 끝점 조건이 사용됩니다.x
나y
가 스칼라인 경우, 다른 항목과 동일한 길이를 갖도록 확장된 다음 not-a-knot 끝점 조건이 사용됩니다.y
가x
가 가진 항목보다 2개 이상 더 많은 값을 가진 벡터인 경우,spline
은y
의 처음과 마지막 값을 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
— 쿼리 점
스칼라 | 벡터 | 행렬 | 배열
쿼리 점으로, 스칼라, 벡터, 행렬 또는 배열로 지정됩니다. xq
에 지정된 점은 spline
이 계산하는 보간된 함수 값 yq
의 x 좌표입니다.
데이터형: single
| double
출력 인수
s
— 쿼리 점에서 보간된 값
스칼라 | 벡터 | 행렬 | 배열
쿼리 점에서 보간된 값으로, 스칼라, 벡터, 행렬 또는 배열로 반환됩니다.
s
의 크기는 다음과 같이 y
와 xq
의 크기와 관련이 있습니다.
y
가 벡터인 경우,s
는xq
와 크기가 동일합니다.y
가 크기Ny = size(y)
로 구성된 배열인 경우, 다음 조건이 적용됩니다.xq
가 스칼라나 벡터인 경우,size(s)
는[Ny(1:end-1) length(xq)]
를 반환합니다.xq
가 배열인 경우size(s)
는[Ny(1:end-1) size(xq)]
를 반환합니다.
pp
— 조각별 다항식
구조체
조각별 다항식으로, 구조체로 반환됩니다. 이 구조체를 ppval
함수와 함께 사용하여 한 개 이상의 쿼리 점에서 조각별 다항식의 값을 계산합니다. 이 구조체는 다음 필드를 가집니다.
필드 | 설명 |
---|---|
form | 조각별 다항식의 경우 |
breaks | 각 |
coefs | 각 행 |
pieces | 구간 조각의 개수, |
order | 다항식의 차수 |
dim | 대상의 차원 |
coefs
의 다항식 계수는 각 구간의 로컬 계수이기 때문에, 이 계수를 일반적인 다항 방정식에서 사용하려면 대응하는 매듭 구간의 아래쪽 끝점을 빼야 합니다. 즉, 구간 [x1,x2]
에서 계수 [a,b,c,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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력값
x
는 순증가(Strictly Increasing)해야 합니다.코드 생성 시
NaN
값을 포함하는y
항목은 제거되지 않습니다.코드 생성 시
y
의 무한 끝점 기울기에 대해 오류가 보고되지 않습니다.pp = spline(x,y)
구문에 대해 코드를 생성하는 경우, MATLAB®의ppval
함수에pp
를 입력할 수 없습니다. 코드 생성기에서 생성한pp
구조체에서 MATLABpp
구조체를 생성하려면 다음을 수행하십시오.코드 생성 시
unmkpp
를 사용하여 조각별 다항식 세부 정보를 MATLAB에 반환합니다.MATLAB에서
mkpp
를 사용하여pp
구조체를 생성합니다.
xq
를 지정했는데y
가 가변 크기를 가지며 가변 길이 벡터가 아닌 경우, 생성된 코드의 벡터 출력값의 방향이 MATLAB의 방향과 일치하지 않을 수 있습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력 인수
y
는 비희소 형식이어야 합니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
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)