Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- g = 9.81
- l = 1.6
- l_big = 2.0
- l_small = 1.6
- m = 0.01
- alpha = 0.4
- k = 100
- def sh2(r1,t):
- theta1,omega1 = r1
- sh2_theta1 = omega1/(l + ((1/2)*alpha*(1+np.tanh(theta1*omega1*k))))**2
- sh2_omega1 = -g*(l + ((1/2)*alpha*(1+np.tanh(theta1*omega1*k))))*sin(theta1)
- #return sh2_theta1, sh2_omega1
- return np.array([sh2_theta1, sh2_omega1],float)
- init_state = np.radians([69.0,0])
- dt = 1/40
- time = np.arange(0,10.0,dt)
- timexo = np.arange(0,10.0,dt)
- state2 = integrate.odeint(sh2,init_state,time)
- #print(state2)
- print(len(state2),len(timexo))
- plt.plot(timexo[0:2500],state2[0:2500])
- plt.show()
- #phase plot attempt
- # initial values
- x_0 = 0 # intial angular position
- v_0 = 1.0 # initial angular momentum
- t_0 = 0 # initial time
- # initial y-vector from initial position and momentum
- y0 = np.array([x_0,v_0])
- # max value of time and points in time to integrate to
- t_max = 10
- N_spacing_in_t = 1000
- # create vector of time points you want to evaluate
- t = np.linspace(t_0,t_max,N_spacing_in_t)
- # create vector of positions for those times
- y_result = np.zeros((len(t), 2))
- # loop through all demanded time points
- for it, t_ in enumerate(t):
- # get result of ODE integration up to the demanded time
- y = integrate.odeint(sh2,init_state,t_)
- # write result to result vector
- y_result[it,:] = y
- # get angle and angular momentum
- angle = y_result[:,0]
- angular_momentum = y_result[:,1]
- # plot result
- pl.plot(angle, angular_momentum,'-',lw=1)
- pl.xlabel('angle $x$')
- pl.ylabel('angular momentum $v$')
- pl.gcf().savefig('pendulum_single_run.png',dpi=300)
- pl.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement