Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Simulating motion in 1D with varying jerk?

  1. Sep 9, 2010 #1

    I am trying to accurately simulate motion in 1D with a jerk that is changing non-linearly, but predictably. As an arbitrary example, picture jerk increasing logarithmically over time. This is being done in the context of a physics simulation that is 'stepping' frame-by-frame (ie 60 steps per second), calculating distances traveled, new accel, velocity, etc, at the end of each frame. Up until now I have been always assuming a constant jerk frame-to-frame, making things pretty simple. However, this is not very accurate when jerk is in fact changing during the frame itself.

    I can make the simulation more accurate by increasing the number of frames per second, but only to a certain point before hitting a performance wall, and this would still be fundamentally ignoring the fact that jerk not actually constant during the frame.

    For example, lets say that the jerk value at time T is initial jerk to the power of T. I'm trying to figure out how to calculate distance traveled, delta accel, delta, vel, etc in a given frame knowing jerk did in fact change (non-linearly) during the frame. I know all variables at the start of the frame, and just want to accurately generate the same variables for the end of the frame knowing constant elapsed time.

    As far as I can tell, there is no way to accurately factor in the formula-based change in jerk, so instead I am considering using an 'average jerk' for the frame in order to get a best-approximation with the constant jerk based motion formulas. I am doing this by calculating what the jerk would be at the end of a given frame based on the formula for change in jerk over time, then calculating an average jerk for the frame based on the frame start (J0) and end values (ie literally (J0 + JT)/2.0).

    Does this make sense? I know the average jerk I calculate isn't necessarily accurate as the jerk isn't changing linearly, but it seems like it would be a better approximation than assuming the jerk for the entire frame was whatever it was at the start of the frame.

    Am I missing something obvious that would allow a more accurate calculation of metrics each frame with this formula-based change in jerk over time? Maybe a more accurate way to generate the 'average' knowing the formula for change in jerk?

    Thanks for any help!
  2. jcsd
  3. Sep 19, 2010 #2
    It seems to me that the solution should actually be pretty simple..
    I hope I am understanding correctly.

    But if your formula for the jerk at any time t is given as
    [tex]J = J_{0}^{t}[/tex]
    is that correct?
    Then you can find the exact values of acceleration, velocity, and distance at any time t also (provided that you know all the initial conditions).
    They would just be the integrals of each quantity before. Like so:
    [tex]J(t) = J_{0}^{t}[/tex]
    [tex]a(t) = \frac{J_{0}^{t} - 1}{ln(J_{0})} + a_{0}[/tex]
    [tex]v(t) = \frac{J_{0}^{t} - 1}{ln^{2}(J_{0})} - \frac{t}{ln(J_{0})} + a_{0} t + v_{0}[/tex]
    [tex]x(t) = \frac{J_{0}^{t} - 1}{ln^{3}(J_{0})} - \frac{t^{2}}{2 ln(J_{0})} - \frac{t}{ln^{2}(J_{0})} + \frac{1}{2} a_{0} t^{2} + v_{0} t + x_{0}[/tex]

    I really do hope all of that is correct, it's a bit hard to keep all of the terms straight when writing it all in text lol. So I would recommend that you double check my work and make sure I did all of the integrals right.
    If you wish you may be able to use this site to assist you: http://www.wolframalpha.com/
    It can automatically compute integrals for example you can type integral(x^(2)*dx)

    If my answers are correct than you will have an equation of x(t) for any time t. Also since this is a computer program I would strongly recommend that you just find ln(J0) one time, and store the quantity in a variable since it seems to be used a lot. It would slow down your program if you calculated the log every iteration and J0 is a constant any way so it would be a waste of time.

    Hope this helps at all.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook