/*
written by kaspy (kaspyx@gmail.com)
*/
수치해석에서 나오는 해를 찾는 방법이다.
수학에서 이분법(二分法, Bisection method)은 근이 반드시 존재하는 폐구간을 이분한 후, 이 중 근이 존재하는 하위 폐구간을 선택하는 것을 반복하여서 근을 찾는 알고리즘이다. 간단하고 견고하나, 상대적으로 느린 방식이다.
참고 위키
http://ko.wikipedia.org/wiki/%EC%9D%B4%EB%B6%84%EB%B2%95_(%EC%88%98%ED%95%99)
f(x) = x^2 * sin(x) 로 주어졌을때
- #include <stdio.h>
- #include <math.h>
- #define PI 3.1415926535897931
- #define thshold 2 * pow(10,-4)
- double sinfx(double x){
- return (x*x - sin(x));
- }
- void BisectionMethod(double xl,double xu){
- double x;
- double xr;
- double xr2;
- double e0=100.0;
- int it =0;
- printf("it\t\txl\t\txu\t\txr\t\te0\n");
- while(e0 > thshold ){
- x = xl+(xu-xl)/2.0;
- xr = (xl+xu)/2;
- if(sinfx(xl)*sinfx(x) <= 0)
- xu = x;
- else{
- xl = x;
- }
- printf("%d\t%lf\t%lf\t%lf\t%lf\n",it++,xl,xu,xr,e0);
- xr2 = (xl+xu)/2;
- e0 = fabs((xr-xr2)/xr) * 100;
- xr = xr2;
- }
- printf("%lf\n",x);
- }
- int main(void){
- // programmed by kaspyx
- BisectionMethod(0.5,1);
- return 0;
- }
'IT > Numerical analysis' 카테고리의 다른 글
Secant Method c언어로 구현하기 (0) | 2015.05.11 |
---|---|
False Position Method c언어로 구현하기 (2) | 2015.05.11 |
야코비(Jacobi) Method C언어로 구현하기 (0) | 2015.03.31 |
테일러(Taylor) 급수 C언어로 구하기 (0) | 2015.03.17 |