Thread: Help!

  1. #1
    Unregistered
    Guest

    Question Help!

    Can someone please tell me why the following program results in an infinite loop? I have to use an numerical analysis method called Newton's method to determine the root of the function, and stop when the error estimated is < 10^-6.

    I'd appreciate any input anyone has.

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

    void main()
    {
    double x1; /* variable for xn+1 */
    double x0=2; /* initialize x0 to 2*/
    double f;
    double fprime;
    double error;
    double condition;

    condition=pow(10,-6);/* difference between x0 and x1 should be 10^-6*/


    f=(double)(x0*x0*x0)-(double)(2*x0)-(double)5; /* function f(x0)*/
    fprime=x0*x0-2; /* derivative f'(x0) */

    x1=x0-(f/fprime); /* calculation of x1 using Newton's method */

    error=x1-x0; /* error between x0 and x1 */

    if(error<0)
    error=error*-1; /* if error is negative, change to positive */

    while(error>condition)
    {
    x0=x1;

    f=(double)(x0*x0*x0)-(double)(2*x0)-(double)5; /* calculates f(x0) */
    fprime=x0*x0-2;

    x1=x0-(f/fprime); /* calculate new x1 */

    printf("x=%lf\n",x1); /* print value of x1 */
    error=x1-x0; /* recalculate error */

    if(error<0)
    error=error*-1;
    }
    }

  2. #2
    Unregistered
    Guest
    Nevermind. I had the derivative entered wrong.

    Thanks anyway!

Popular pages Recent additions subscribe to a feed