완숙의 블로그

다항식 곡선 피팅 (Curve Fitting with Polynomials) 본문

Programing Language/Matlab

다항식 곡선 피팅 (Curve Fitting with Polynomials)

완숙 2018. 12. 12. 00:54

Curve Fitting with Polynomials

암호를 해독하기 위해 최소제곱법이 필요합니다. (사실 별 필요없다)

Bello-

오늘은 다항식 곡선을 데이터가 주어졌을 때 어떻게 맞출 수 있는지 공부해 봅시다.

Intuition Concept

아래와 같은 그림을 보고 직관적으로 이해해보자.

그림에 총 7개의 돌맹이가 있다고 했을 때,


선생님이 막대기를 줄테니까 저 점들 사이 최대한 중앙에 놔보세요!>

이게 바로 최소제곱법이다.
우리 가우스 형은 이걸 수학적으로 하셨다.

그렇다면 한번만 구부려(2차식) 중앙에 놓으면 다음 그림이 될 것이다.

이와 같은 방식으로 구부린다는 것은 다항식의 차수를 의미하며,

중앙에 놓는다는 것은 구부린 곡선과 점들사이의 거리(엄밀히 말하면 y값의 차이)가 

가장 작게 나도록 해달라는 것을 의미한다.

3차, 4차, 5차, 6차까지의 그림이다.

그런데 왜 7차는 없느냐! 구부린다는 것은 적어도 2점이 있을 때 구부릴 수 있다.

 따라서 7개의 점에서는 6개의 간격이 발생할 수 있으므로 피팅할 수 있는 다항식의 차수도 6으로 결정된다.

그런데 또 사는게 팍팍하다.

x와 y데이터를 플랏해보았더니 다항식의 꼴이 딱봐도 아닌거야. 지수, 로그 이런거야..

어떻게 할까?

그래서 우리는 일종의 트릭을 사용할 것이다.

뭔가 너무 대충 정리한 감이 있지만 어쩔 수 없다. 

요약하자면 입력변수와 출력변수간의 상관관계를 보고 함수를 예상한 뒤, 

그 함수가 되려면 입력변수와 출력변수가 어떻게 될 것인지 거꾸로 구하는 것이다.

예를 들어 위 수식중 Exponential을 보게되면, 결과적으로 우리는 x를 넣으면

 결과가 exponential을 거친 결과가 y가 되어야 한다. 

그렇게 하기 위해서는 polyfit에 들어가는 input, output에 각각 (x, lny)의 형태로

넣어주어야 한다.



Function

사용하는 방법은 너무 간단해서 앞의 설명이 초라해진다.

계수행렬 = polyfit(x, y, 차수)

아래는 원하는 함수모양에 따라 어떻게 변수를 다르게 polyfit에 넣어줘여 하는지 정리한 표이다.



Example

t = 0:0.5:5;
w = [6 4.83 3.7 3.15 2.41 1.83 1.49 1.21 0.96 0.73 0.64]
plot(t,w, 'o')

두 변수가 주어졌다. 전혀 모르겠으니 그려보자.

아 귀찮아 졌다. 지수나 로그일 것 같다.
난 로그보다는 지수가 좋으니까 (그나마 좋은건 미니ㅇ) 표에서 exp일 때 변수를 찾아서 넣어준다.

t = 0:0.5:5;
w = [6 4.83 3.7 3.15 2.41 1.83 1.49 1.21 0.96 0.73 0.64]
plot(t,w, 'o')

p = polyfit(t, log(w),1)
t1 = 0:0.1:5.5;
reg_exp = polyval(p,t1)
y1 = exp(reg_exp)
plot(t,w, 'o', t1, y1)

아름답다.

그럼
Poopaye-

Comments