""" This file will use pydy.codegen to simulate the double pendulum. """ from numpy import concatenate, array, linspace from pydy.system import System from scipy.integrate import odeint from double_pendulum import * constants = {l: 10.0, m: 10.0, g: 9.81} initial_conditions = {q1: 1.0, q2: 0.0, u1: 0.0, u2: 0.0} sys = System(KM, constants=constants, initial_conditions=initial_conditions) frames_per_sec = 60 final_time = 5.0 times = linspace(0.0, final_time, final_time * frames_per_sec) sys.times = times x = sys.integrate()
Ir: rod_inertia, L1: Length1_values[i], L2: Length2_values[i], e_offset: e_offset_scalar, k_C: spring_on_frame_C } sys.initial_conditions = { x: x_values_heat_np[i], z: z_values_heat_np[i], theta: theta_values_heat_np[i, 0], e: e_equil, phi: theta_values_heat_np[i, 0] } sys.times = np.linspace(0.0, runtime, runtime * 30) sys.generate_ode_function(generator='cython') resp = sys.integrate() true_x_pre.append(resp[:, 0][-1]) true_z_pre.append(resp[:, 1][-1]) true_e_pre.append(resp[:, 2][-1]) true_theta_pre.append(resp[:, 3][-1]) true_phi_pre.append(resp[:, 4][-1]) print(i) true_x = np.asarray(true_x_pre) true_z = np.asarray(true_z_pre) true_e = np.asarray(true_e_pre) true_theta = np.asarray(true_theta_pre) true_phi = np.asarray(true_phi_pre) np.save('true_x', true_x) np.save('true_z', true_z) np.save('true_e', true_e)
def example_pydy(ax=None, **options): """ Example from the documentation of :epkg:`pydy`. @param ax matplotlib axis @parm options extra options @return ax """ # part 1 from sympy import symbols import sympy.physics.mechanics as me mass, stiffness, damping, gravity = symbols('m, k, c, g') position, speed = me.dynamicsymbols('x v') positiond = me.dynamicsymbols('x', 1) force = me.dynamicsymbols('F') ceiling = me.ReferenceFrame('N') origin = me.Point('origin') origin.set_vel(ceiling, 0) center = origin.locatenew('center', position * ceiling.x) center.set_vel(ceiling, speed * ceiling.x) block = me.Particle('block', center, mass) kinematic_equations = [speed - positiond] force_magnitude = mass * gravity - stiffness * position - damping * speed + force forces = [(center, force_magnitude * ceiling.x)] particles = [block] kane = me.KanesMethod(ceiling, q_ind=[position], u_ind=[speed], kd_eqs=kinematic_equations) kane.kanes_equations(forces, particles) # part 2 from numpy import linspace, sin from pydy.system import System sys = System(kane, constants={ mass: 1.0, stiffness: 1.0, damping: 0.2, gravity: 9.8 }, specifieds={ force: lambda x, t: sin(t) }, initial_conditions={ position: 0.1, speed: -1.0 }, times=linspace(0.0, 10.0, 1000)) y = sys.integrate() # part 3 import matplotlib.pyplot as plt if ax is None: _, ax = plt.subplots(nrows=1, ncols=1, figsize=options.get('figsize', (5, 5))) ax.plot(sys.times, y) ax.legend((str(position), str(speed))) return ax
def example_pydy(ax=None, **options): """ Example from the documentation of :epkg:`pydy`. @param ax matplotlib axis @parm options extra options @return ax """ # part 1 from sympy import symbols import sympy.physics.mechanics as me mass, stiffness, damping, gravity = symbols('m, k, c, g') position, speed = me.dynamicsymbols('x v') positiond = me.dynamicsymbols('x', 1) force = me.dynamicsymbols('F') ceiling = me.ReferenceFrame('N') origin = me.Point('origin') origin.set_vel(ceiling, 0) center = origin.locatenew('center', position * ceiling.x) center.set_vel(ceiling, speed * ceiling.x) block = me.Particle('block', center, mass) kinematic_equations = [speed - positiond] force_magnitude = mass * gravity - stiffness * position - damping * speed + force forces = [(center, force_magnitude * ceiling.x)] particles = [block] kane = me.KanesMethod(ceiling, q_ind=[position], u_ind=[speed], kd_eqs=kinematic_equations) kane.kanes_equations(forces, particles) # part 2 from numpy import linspace, sin from pydy.system import System sys = System(kane, constants={mass: 1.0, stiffness: 1.0, damping: 0.2, gravity: 9.8}, specifieds={force: lambda x, t: sin(t)}, initial_conditions={position: 0.1, speed: -1.0}, times=linspace(0.0, 10.0, 1000)) y = sys.integrate() # part 3 import matplotlib.pyplot as plt if ax is None: _, ax = plt.subplots( nrows=1, ncols=1, figsize=options.get('figsize', (5, 5))) ax.plot(sys.times, y) ax.legend((str(position), str(speed))) return ax