Pendulum Problem

1. Oct 14, 2008

MASH4077

Pendulum Problem....

Hi all,

I've written a little simulator (in C++) that demonstrates a simple pendulum swinging from right to left and back again. To simulate the motion I'm using the simple second order differential equation:

accelaration = -(g/L) * theta

and numerically integrating this using the RK4 method. However I'm having a problem in that the simulation is escaping really quickly. I just want to ask under what conditions would this happen?. I think I'm starting off the simulation with reasonable values and they are outlined below:

angle = 22.5, start angular_vel = 0.0f, init accel = calculated using above formula.

Any advice on why the simulation could be breaking so quickly is much appreciated.

Thanks.

2. Oct 14, 2008

nasu

Re: Pendulum Problem....

I am not saying that this is the problem with your program but the
acceleration cannot be g/L *theta. Maybe g*theta.

3. Oct 14, 2008

jdog

Re: Pendulum Problem....

I may not understand the simulation, but I do have something that may be of interest. The expression you have, "acclereration = -(g/L)*theta" is an approximation. The true differential equation should have a sin(theta) rather than theta. The approximation only holds for small angles. Could this be the source of your "escaping"?

It would seem to me, that you are providing an acceleration that is greater than what nature would provide, and the larger the angle, the more inaccurate the model. Also, the approximation that sin(theta) ~ theta is only accurate if theta is given in radians. You're model therefore assumes you are using radians. Try a reasonable number for angle like 0.3 and see what you get. Or, you could change to sin(theta) and keep your numbers.

4. Oct 14, 2008

jdog

Re: Pendulum Problem....

Yeah, Nasu is right too, but that L shouldn't really affect anything qualitatively.

5. Oct 15, 2008

MASH4077

Re: Pendulum Problem....

Yup. I think that that is the problem for the simulation escaping. I realized this when I actually took another look at the implementation. I wasn't calculating the acceleration of the pendulum based on the initial conditions provided to the simulation, but rather I was just "feeding in" a value. I've just re-written that particular part to ensure that given the initial conditions, the correct value is assigned to the acceleration variable. Everything is now behaving as it should do.

Many Thanks.

:)