오늘의 포스팅에서는 MATLAB 을 이용하여 간단한 수치해석 기법인 bisection method(이분법) 에 대해 알아 보겠습니다.

 

bisection method 는 특정 구간의 중간 값의 부호 판단을 통해 수치적으로 해를 구하는 방식입니다.

 

 

에 대하여 상대오차 10-8 이하가 되도록 [-10, 10] 구간에서 해를 구해 보겠습니다.

 

 

 

command 창에서 결과를 확인하면 Bisection method 를 이용한 결과와 roots() 함수를 이용한 결과가 근사적으로 일치함을 확인 할 수 있습니다.

 

 

 

  


  1. 2018.04.01 00:27

    비밀댓글입니다

    • 남성 2018.04.01 05:12 신고

      아래 링크에서 Bisection method 횟수에 대한 계산 과정을 보시면 최소 횟수 계산 식을 확인 하실수 있습니다.

      https://x-engineer.org/undergraduate-engineering/advanced-mathematics/numerical-methods/the-bisection-method-for-root-finding/

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

 


  1. 1 2011.04.07 11:00

    좋은정보 ㄳ

+ Recent posts