makima
조각별 3차 에르미트 다항식 변형 보간
설명
예제
코사인 데이터의 아키마(Akima) 보간
makima
를 사용하여 간격이 균일하지 않은 샘플 점에서 코사인 곡선을 보간합니다.
x = [0 1 2.5 3.6 5 7 8.1 10]; y = cos(x); xq = 0:.25:10; yq = makima(x,y,xq); plot(x,y,'o',xq,yq,'--')
진동 함수를 사용하여 아키마 알고리즘이 국소 극값 근처의 곡선을 평탄화합니다. 이 평탄화를 보상하려면 국소 극값 근처에 더 많은 샘플 점을 추가하면 됩니다.
와 를 추가하고 보간을 다시 플로팅합니다.
x = [0 1 2.5 3.6 5 6.5 7 8.1 9 10]; y = cos(x); xq = 0:.25:10; yq = makima(x,y,xq); plot(x,y,'o',xq,yq,'--')
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
와 이러한 점에서의 값 y
에 대한 벡터를 만듭니다. makima
를 사용하여 데이터에 대한 조각별 다항식 구조체를 생성합니다.
x = -5:5; y = [1 1 1 0 0 1 1 2 2 2 2]; pp = makima(x,y)
pp = struct with fields:
form: 'pp'
breaks: [-5 -4 -3 -2 -1 0 1 2 3 4 5]
coefs: [10x4 double]
pieces: 10
order: 4
dim: 1
구조체에는 데이터를 포괄하는 차수가 4인 10개의 다항식에 대한 정보가 포함됩니다. pp.coefs(i,:)
에는 절점 [breaks(i) breaks(i+1)]
에 의해 정의된 영역에서 유효한 다항식 계수가 포함됩니다.
구조체에 ppval
을 사용하여 여러 쿼리 점에서 보간을 계산한 다음 결과를 플로팅합니다. 3개 이상의 상수 점이 있는 영역에서 아키마 알고리즘은 직선을 사용하여 각 점을 연결합니다.
xq = -5:0.2:5; m = ppval(pp,xq); plot(x,y,'o',xq,m,'-.') ylim([-0.2 2.2])
입력 인수
x
— 샘플 점
벡터
샘플 점으로, 벡터로 지정됩니다. 벡터 x
는 데이터 y
가 주어지는 점을 지정합니다. x
의 요소는 유일해야 합니다.
데이터형: single
| double
y
— 샘플 점에서의 함수 값
벡터 | 행렬 | 배열
샘플 점에서의 함수 값으로, 숫자형 벡터, 행렬 또는 배열로 지정됩니다. x
는 y
와 길이가 동일해야 합니다.
y
가 행렬이나 배열인 경우 마지막 차원의 값 y(:,...,:,j)
는 x
와 일치시킬 값으로 간주됩니다. 이 경우, y
의 마지막 차원은 x
와 길이가 동일해야 합니다.
데이터형: single
| double
xq
— 쿼리 점
스칼라 | 벡터 | 행렬 | 배열
쿼리 점으로, 스칼라, 벡터, 행렬 또는 배열로 지정됩니다. xq
에 지정된 점은 makima
가 계산하는 보간된 함수 값 yq
의 x 좌표입니다.
데이터형: single
| double
출력 인수
yq
— 쿼리 점에서 보간된 값
스칼라 | 벡터 | 행렬 | 배열
쿼리 점에서 보간된 값으로, 스칼라, 벡터, 행렬 또는 배열로 반환됩니다. yq
의 크기는 다음과 같이 y
와 xq
의 크기와 관련이 있습니다.
y
가 벡터인 경우,yq
는xq
와 크기가 동일합니다.y
가 크기Ny = size(y)
로 구성된 배열인 경우, 다음 조건이 적용됩니다.xq
가 스칼라나 벡터인 경우,size(yq)
는[Ny(1:end-1) length(xq)]
를 반환합니다.xq
가 배열인 경우size(yq)
는[Ny(1:end-1) size(xq)]
를 반환합니다.
pp
— 조각별 다항식
구조체
조각별 다항식으로, 구조체로 반환됩니다. 이 구조체를 ppval
함수와 함께 사용하여 한 개 이상의 쿼리 점에서 보간 다항식의 값을 계산합니다. 이 구조체는 다음 필드를 가집니다.
필드 | 설명 |
---|---|
form | 조각별 다항식의 경우 |
breaks | 각 |
coefs | 각 행 |
pieces | 구간 조각의 개수, |
order | 다항식의 차수 |
dim | 대상의 차원 |
coefs
의 다항식 계수는 각 구간의 로컬 계수이기 때문에, 이 계수를 일반적인 다항 방정식에서 사용하려면 대응하는 매듭 구간의 아래쪽 끝점을 빼야 합니다. 즉, 구간 [x1,x2]
에서 계수 [a,b,c,d]
에 대해, 대응하는 다항식은 다음과 같습니다.
세부 정보
수정된 아키마 보간(Modified Akima)
1차원 보간에 대한 아키마 알고리즘은 연속 1계 도함수(C1)를 갖는 조각별 다항식들을 생성하기 위해 3차 보간을 수행합니다. 자세한 설명은 [1]과 [2]를 참조하십시오. 이 알고리즘은 과도한 국소 요동을 방지합니다.
가 구간 의 기울기이면 샘플 점 에서의 도함수 의 값은 인근 기울기들의 가중 평균입니다.
아키마의 기존 공식에서 가중치는 다음과 같습니다.
기존 아키마 알고리즘은 양쪽 점에 동일한 가중치를 주므로 요동이 균일하게 분배됩니다.
기울기가 서로 다른 두 평탄 영역이 만나는 경우, 기존 아키마 알고리즘에 적용된 수정 사항은 기울기가 0에 더 가까운 쪽에 가중치를 더 줍니다. 수정된 알고리즘은 가로에 더 가까운 쪽에 우선 순위를 주는데, 이는 보다 직관적이면서 오버슈트를 방지합니다. 특히, 동일직선상의 점이 3개 이상 연속될 때마다 이 알고리즘은 이러한 점들을 직선으로 연결하므로 오버슈트를 방지합니다.
수정된 아키마 알고리즘에서 사용하는 가중치는 다음과 같습니다.
아키마 알고리즘은 spline
알고리즘과 비교했을 때 요동을 더 적게 생성하며 평탄 영역 간의 빠른 변화를 처리하기에 더 적합합니다. pchip
알고리즘에 비해 아키마 알고리즘은 과감하게 평탄화되지 않으므로 진동 데이터를 처리할 수 있습니다.
참고 문헌
[1] Akima, Hiroshi. "A new method of interpolation and smooth curve fitting based on local procedures." Journal of the ACM (JACM) , 17.4, 1970, pp. 589–602.
[2] Akima, Hiroshi. "A method of bivariate interpolation and smooth surface fitting based on local procedures." Communications of the ACM , 17.1, 1974, pp. 18–20.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
입력값
x
는 순증가(Strictly Increasing)해야 합니다.코드 생성 시
NaN
값을 포함하는y
항목은 제거되지 않습니다.pp = makima(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(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
makima
함수는 GPU 배열을 완전히 지원합니다. GPU에서 이 함수를 실행하려면 입력 데이터를 gpuArray
(Parallel Computing Toolbox)로 지정하십시오. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
사용법 관련 참고 및 제한 사항:
분산 배열에 대해서는
makima(
구문이 지원되지 않습니다.x
,y
)
자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2019b에 개발됨
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)