MATLAB 에서 다항식 또는 연속 함수의 해를 구하는 방법에 대해 설명한다. fzero() 은 연속 함수의 한 지점에서의 해를 구하는 함수이다. 함수의 원형은 x = fzero(fun,x0) 이며 fun 이라는 함수에 대하여 x0 근처에서의 해를 찾아 준다. fzero() 함수는 y 값의 부호가 바뀌는 지점을 찾아서 해를 구하는 방식이다. 내부 알고리즘으로는 bisection, secant, inverse quadratic interpolation methods 이렇게 세 개 알고리즘이 조합된 방식을 이용한다고 한다. 해를 찾는 방식이 y 의 부호 변경 지점을 찾는 것이므로 y=x2 과 같이 x축에 접하는 함수에 대한 해를 찾을 때는 사용하지 않는 것이 좋다.
Command 창에 다음과 같은 명령을 해 보자.
fzero('x.^2',0) command 창에는 0 이라는 결과가 나올 것이다. 하지만 다음과 같이 fzero('x.^2',1) 이라고 한다면 ans 로서 NaN 이 뜨게 된다. 이런 경우 때문에 개인적인 생각으로는 fzero() 를 이용할 때는 그래프를 한번 그려 봐서 개형을 파악하고 fzero() 함수를 적용하는 것이 좋다.
sin(x) 그래프에 대해 x 값1 근처의 해를 구해 보자.
일단 그래프를 한번 그려 본다. 다음 과 같음 명령을 하면 그래프가 그려진다.
ezplot('sin(x)'), grid on
위 그래프를 보면 y 의 값들이 0 을 통과 하므로 fzero()를 이용해도 괜찮다고 판단한 후 아래 명령을 이용하여 1 근처의 해를 구한다.
fzero('sin(x)',1)
ans =
1.5485e-024
결과로 나온 1.5485e-024 은 0 이라는 것을 알 수 있다.
다음으로 다항식의 해를 구해주는 roots 함수에 대해 알아 보자.
위 수식에 대한 해를 구해 보자. 함수의 이용 방법은 굉장히 간단하다.
r = roots([1 4 2 -1])
r =
-3.3028
-1.0000
0.3028
위에서 구한 다항식의 해를 이용하여 다항식 계수를 역으로 계산해 보자.
coeff=poly(r)
coeff =
1.0000 4.0000 2.0000 -1.0000
간단하게 다항식의 계수 값들이 역으로 계산되는 것을 확인 할 수 있다.
물론 poly() 라는 함수를 이용하지 않고 conv() 함수를 이용하는 방법도 있다.
이에 대해서는 다음 포스트를 확인 하기 바란다.
2011/03/01 - [MATLAB] - conv(), filter(), 인수분해 전개
'programming language > MATLAB' 카테고리의 다른 글
MATLAB 입력 신호의 delay 확인 xcorr(), finddelay() (0) | 2011.03.14 |
---|---|
MATLAB 벡터화 기법 (0) | 2011.03.14 |
MATLAB 적분 추가 내용 trapz() (0) | 2011.03.14 |
MATLAB 적분 int(), quad() (6) | 2011.03.14 |
MATLAB ezplot() 함수로 그래프를 쉽게 그리자 (2) | 2011.03.13 |
MATLAB 다항식의 계수 추정 polyfit(), polyval() (0) | 2011.03.12 |
MATLAB 소스 코드 protection, pcode (1) | 2011.03.11 |
MATLAB [디지털 통신] EYE PATTERN (10) | 2011.03.09 |
댓글