/ Published in: C++
A more in depth discussion on the algorithm is taken from this book http://j.mp/GWBfba.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
/* * 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; }
URL: http://j.mp/GWBfba