Newton algorithm - C implementation

newton algorithm
deadline home
root finding
numerical methods
newton method
bisection method
secant method
brent method
regula falsi method
In numerical analysis, Newton's method (or the Newton-Raphson method) is an efficient algorithm for finding approximations to the roots of a real-valued function. Here is the C implementation of the Newton algorithm for computing the solutions of a nonlinear equation.


// Implementation of the Newton algorithm in C

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

double newton(double x_0, double tol, int max_iters, 
          int* iters_p, int* converged_p);
double f(double x);
double f_prime(double x);

int main() {
   double x_0;       /* Initial guess                */
   double x;         /* Approximate solution         */
   double tol;       /* Maximum error                */
   int    max_iters; /* Maximum number of iterations */
   int    iters;     /* Actual number of iterations  */
   int    converged; /* Whether iteration converged  */

   printf("Enter x_0, tol, and max_iters\n");
   scanf("%lf %lf %d", &x_0, &tol, &max_iters);

   x = newton(x_0, tol, max_iters, &iters, &converged);

   if (converged) {
    printf("Newton algorithm converged after %d steps.\n", 
    printf("The approximate solution is %19.16e\n", x);
    printf("f(%19.16e) = %19.16e\n", x, f(x));
   } else {
    printf("Newton algorithm didn't converge after %d steps.\n", 
    printf("The final estimate was %19.16e\n", x);
    printf("f(%19.16e) = %19.16e\n", x, f(x));

   return 0;
}  /* main */

double newton(double x_0, double tol, int max_iters, 
          int* iters_p, int* converged_p) {
   double x = x_0;
   double x_prev;
   int    iter = 0;

   do {
      x_prev = x;
      x = x_prev - f(x_prev)/f_prime(x_prev);
   } while (fabs(x - x_prev) > tol && iter < max_iters);

   if (fabs(x - x_prev) <= tol)
      *converged_p = 1;
      *converged_p = 0;
   *iters_p = iter;
   return x;
}  /* newton algorithm */

double f(double x) {
   return x*x-2;
}  /* f */

double f_prime(double x) {
   return 2*x; //the derivative
}  /* f_prime */

Solve equations using Newton interactive.

Back to Newton method.

Syntax highlighting by WebCpp.

DeadLine OnLine - free equation solver. Copyright 2003-2007 Ionut Alex. Chitu. | Contact | Sitemap