1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab Newton's Method

  1. Oct 30, 2013 #1
    1. The problem statement, all variables and given/known data
    So, I've written a program that carries out Newton's method. The root of the equation which I am trying to find is approximately 13.1. This is fine and my program returns the correct value when my initial guess is around this value (up to about x = 50 as my initial guess), however when I start using values such as 100+ it returns a complex root. The real part will be approximately 13.1 and the imaginary part will be VERY close to 0. Why is this and is there any way that I can fix/safeguard against this? Thanks.


    2. Relevant equations



    3. The attempt at a solution
    Code (Text):
    function xnew = Newton (f, df, xi, tol)
    xold = xi; %x(old) is assigned the value of the initial guess.
    xnew = xold - f(xold)/df(xold); %Implement newtons method to find x(new).
    k = 0; %Assigns k(the counter) an initial value.
    fprintf('\nTable of Iteration No.(k) and Depth(h)\n')
    fprintf('\nIteration No.\tDepth\n')
    fprintf('%5u\t\t%2.6e\n',k,xi)

    while ((abs(xnew - xold))/(abs(xnew)) > tol) %Running condition.
        if (k <= 100) %Max number of iterations.
            xold = xnew; %x(old) get's x(new)'s calculated value as per Newton Method's.
            xnew = xold - f(xold)/df(xold);
            k = k + 1; %Increment k.
        else
            warning('Maximum number of iterations has been reached')
            break;
        end
        fprintf('%5u\t\t%2.6e\n',k,xnew)
    end
     
  2. jcsd
  3. Oct 31, 2013 #2
    Yeah, so f and df are both printing out complex values once the initial guess is about 45 and above(remember the actual value of the root is about 13.1) and once the initial guess is about 1000, NaN is returned as the root. This is due to f being Inf + some tiny imaginary number and df being -Inf + some tiny imaginary number. Thus, f/fd will return NaN. First of all, is this due to a problem with my algorithm or is this just a shortcoming of Newton's Method? And second, how can I safeguard against getting imaginary values and values that are too large(i.e. Inf) for f and df? Like, is there a way to check before Newton's Method is carried out to see if the initial guess is valid? Thanks.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted