/*
 * ------------------
 *      이분법      *
 * ------------------
 */

 

#include <stdio.h>
#include <math.h>

#define f(x) ((x)*(x)*(x)-(x)+1)
#define EPS 1e-8                   /* 중단오차 */
#define LIMIT 50                    /* 중단회수 */

int main(void)
{
    double low,high,x;
    int k=1;

    low=-2.0; high=2.0;
    for (k=1;k<=LIMIT;k++) {
        x=(low+high)/2;
        if (f(x)>0)
            high=x;
        else
            low=x;                // 수렴조건으로 Abs(f(x))<EPS를 사용해도 된다.
        if (f(x)==0 || fabs(high-low)<fabs(low)*EPS){
            printf("x=%f\n",x);
            break;
        }
    }
    if (k>LIMIT)
        printf("수렴하지 않는다.\n");

 return 0;
}


// 1차 방정식(그래프 내에서 직선)외의 방정식을 비선형 방정식이라 한다. 이와 같은 방정식의

근을 구하는 방법에는 이분법이 있다. 이분법에서는 데이터 범위를 반으로 나누어 근이 어는 쪽에

있는지, 조사를 반복해서 조사범위를 근을 향해서 점차 좁혀간다.

+ Recent posts