Solve non-dimensionalized spring pendulum system on python

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 2K views
gothloli
Messages
37
Reaction score
0

Homework Statement


I'm supposed to solve the spring pendulum numerically on python 2.7, using odeint. The system is supposed to solved for the y -direction and the x-direction in terms of time. In class we did this for pendulum DE, but that only had x as the dependent variable, this system has two.

Homework Equations


These are the non-dimensionalized De's I get
[itex]\frac{d^{2}Y}{d\tau^{2}} = -1+\frac{(1-Y)}{\sigma}-\frac{(1-\sigma)(1-Y)}{\sigma\sqrt{X^{2}+(1-Y)^{2}}}[/itex]

and
[itex]\frac{d^{2}X}{d\tau^{2}}=-\frac{X}{\sigma}+\frac{(1-\sigma)X}{\sigma\sqrt{X^{2}+(1-Y)^{2}}}[/itex].
Where σ is the non-dimensional parameter

The Attempt at a Solution


def rhs(xvector,t):

x1dot=xvector[1]
x2dot=xvector[3]
x3dot=yvector[0]
x4dot=(-xvector[1]/sigma)+((1-sigma)*xvector[0])/(sigma*sqrt((xvector[0])**2+(1-yvector[0])**2))

return [x1dot,x2dot,x3dot,x4dot]

This is the beginning of the code, but I don't know how to include the y vector into this function?
 
Last edited:
Physics news on Phys.org


I understand your struggle with using odeint to solve a spring pendulum with two dependent variables. The first step in solving this problem is to make sure that your equations are correctly non-dimensionalized, as this can affect the behavior of the system. From your homework equations, it looks like you have correctly non-dimensionalized the equations.

To include the y vector into your function, you can simply add it as another input to the function. Your function will then take in both the x and y vectors, and you can use them in your equations accordingly. Your code would look something like this:

def rhs(xvector, yvector, t):
x1dot = xvector[1]
x2dot = xvector[3]
y1dot = yvector[1]
y2dot = (-yvector[1]/sigma) + ((1-sigma)*yvector[0])/(sigma*sqrt((xvector[0])**2+(1-yvector[0])**2))

return [x1dot, x2dot, y1dot, y2dot]

This way, you can solve for both the x and y directions simultaneously. I hope this helps and good luck with your assignment!