Global Errors when solving the Equation of Motion

  1. Hi All,
    I’m implementing a code to solve the equation of motion using the 4-step Adams-Bashforth method.
    Here’s my section of code that does this:

    a=F/m;

    upnew= up + delta *( (55/24)*a - (59/24)*am1 +(37/24)*am2 - (3/8)*am3 );
    xnew=x + delta *( (55/24)*up - (59/24)*upm1 +(37/24)*upm2 - (3/8)*upm3);

    am1=a;
    am2=am1;
    am3=am2;
    upm1=up;
    upm2=upm1;
    upm3=upm2;

    up=upnew;
    x=xnew;

    It seems to work; at least it produces sensible results which agree with the Euler forwards method. However, I read that the global error should be proportional to delta^4, but this code produces results that have errors proportional to delta. Why is this? Is there some quirk of using the method as a double integral reduces the accuracy? Or am I getting something wrong?

    Thanks in advance,
     
    Last edited: Jun 4, 2012
  2. jcsd
  3. AlephZero

    AlephZero 7,298
    Science Advisor
    Homework Helper

    Assuming your programming language executes statements sequentially. that sets am1 = a, then am2 = a, then am3 = a. You are getting similar results to the Euler forwards method because your code is just a complicated way of doing the Euler forwards method!

    The fix is to update things in the right order.
    am3=am2;
    am2=am1;
    am1=a;
    and similarly for the u's
     
Know someone interested in this topic? Share a link to this question via email, Google+, Twitter, or Facebook