본문 바로가기
programming language/MATLAB

MATLAB 함수의 해를 구해 보자~ fzero(), roots(), poly()

by 남성 2011. 3. 13.

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(), 인수분해 전개

 


태그

, , ,

댓글2