## Posted By

Bangonkali on 03/28/12

# Numerical Methods: Bisection Method

/ Published in: C++

A more in depth discussion on the algorithm is taken from this book http://j.mp/GWBfba.

`/*  * File:   main.cpp * Author: Bangonkali ([email protected]) * * Created on March 27, 2012, 9:23 PM *  * Information: A more in depth discussion on the algorithm * is taken from this book http://j.mp/GWBfba  */ #include <cstdlib>#include <iostream>#include <cmath>using namespace std; /* *  */ double f(double x = 0) {    // this is the function to find the root of    // f(x) = (x+2)(x+2)(x+2); roots = -2;    return (x*x*x) + (6*x*x) + (12*x) + 8;} /* * Get the number of iterations. More details are discussed * on this great book http://j.mp/GWBfba (page 3). */int i(double a, double b, double tolerance) {    return round(log2((abs(b-2))/tolerance));} int main(int argc, char** argv) {    double a = 1e11; // initial guess a    double b = -1e11; // initial guess b     double c = 0; // root approximation    double y = 0; // temporary holder (optimization)     int iterations = i(a,b,1e-12); // get the num of iterations    cout << "iterations: " << iterations << endl;     for (int i = 0; i < iterations; i++) {        c = (a + b) / 2; // get the root approximation        cout << i << ":\nc = " << c << endl;         y = f(c);        cout << "y = " << c << endl;         if (y < 0) {            b = c;            cout << "b = " << c << endl;        } else if (y > 0) {            a = c;            cout << "a = " << c << endl;        } else {            break;        }    }     cout << "root: " << c;     return 0;}`