Monday, September 5, 2011

Numerical Methods: Solution of non-linear equations by using Bisection method in C

Algorithm:

  1. Declare and initialize necessary variables like up_range, mid, low_range etc.
  2. Read the range( upper and lower)  from user within which the root of the equation  is to be calculated.
  3. If root lies within the range? if yes: go to step 4. if no: go to step 2
  4. Calculate the mid value of upper and lower range, mid = (upper+lower)/2
  5. Calculate the functional value at mid i.e. func(mid).
  6. If func(mid)*func(low_range) is less than zero, then replace upper range by mid else replace lower range by mid
  7. Display the no of iteration and root
  8. if func(mid) is very small? yes: go to step 9. No: go to step 4
  9. Display the value of most closest and accurate root.

Source Code:

/********************************************
    program: solution of non-linear equation
                    bisection method
    language: C
    Author : Bibek Subedi
    Tribhuvan University, Nepal
************************************************/
#include<stdio.h>
#include<math.h>
//function that returns the functional value
float func(float x){
    return (pow(x,3)+5*pow(x,2)-7);
}
int main(){
    float up_range, low_range, mid;
    int i = 0; //no of iteration
    printf("Enter the range: ");
    scanf("%f%f",&up_range,&low_range);
    while(func(up_range)*func(low_range) > 0){ //repeatadly read until the range has root
        printf("\nThis range doesnot contains any root");
        printf("\nEnter again the range: ");
        scanf("%f%f",&up_range,&low_range);
    }
    do{
        mid = (up_range + low_range) / 2;
        if(func(low_range) * func(mid) < 0){ //if signs of mid and low_range is
            up_range = mid;                  //different, replace up_range by mid
        }else{ //else raplace, low_range by mid
            low_range = mid;
        }
        i++;
        printf("\nAt iteration: %d, root = %f",i,mid);
    }while(fabs(func(mid))> 0.0001);
    printf("\nThe root of the equation is %f", mid);
    return 0;
}

Output:

bisection

No comments:

Post a Comment