def exercise_euler_params_qE_as_euler_angles_xyz_qE(mersenne_twister): for i_trial in range(30): qE = matrix.col(mersenne_twister.random_double(size=4)).normalize() qr = matrix.col(mersenne_twister.random_double(size=3)-0.5) J = joint_lib.six_dof(type="euler_params", qE=qE, qr=qr) Jea = joint_lib.six_dof(type="euler_angles_xyz", qE=qE, qr=qr) assert approx_equal(Jea.E, J.E) assert approx_equal(Jea.r, J.r) Jep = joint_lib.six_dof(type="euler_params", qE=Jea.qE, qr=qr) assert approx_equal(Jep.E, J.E) assert approx_equal(Jep.r, J.r)
def exercise_euler_params_qE_as_euler_angles_xyz_qE(mersenne_twister): for i_trial in xrange(30): qE = matrix.col(mersenne_twister.random_double(size=4)).normalize() qr = matrix.col(mersenne_twister.random_double(size=3)-0.5) J = joint_lib.six_dof(type="euler_params", qE=qE, qr=qr) Jea = joint_lib.six_dof(type="euler_angles_xyz", qE=qE, qr=qr) assert approx_equal(Jea.E, J.E) assert approx_equal(Jea.r, J.r) Jep = joint_lib.six_dof(type="euler_params", qE=Jea.qE, qr=qr) assert approx_equal(Jep.E, J.E) assert approx_equal(Jep.r, J.r)
def d_pot_d_q_via_finite_differences(O, eps=1.e-6): result = [] for q in [O.J.qE, O.J.qr]: for i in xrange(len(q)): fs = [] for signed_eps in [eps, -eps]: q_eps = list(q) q_eps[i] += signed_eps q_eps = matrix.col(q_eps) if (q is O.J.qE): qE = q_eps qr = O.J.qr else: qE = O.J.qE qr = q_eps J = joint_lib.six_dof(type=O.J.type, qE=qE, qr=qr, r_is_qr=O.J.r_is_qr) e_pot = test_utils.potential_energy(sites=O.sites_F0, wells=O.wells, A=O.A, J=J) fs.append(e_pot) result.append((fs[0] - fs[1]) / (2 * eps)) return matrix.col(result)
def __init__(O, labels, sites, bonds, mersenne_twister): O.labels = labels O.sites = sites O.bonds = bonds O.A = joint_lib.six_dof_alignment(sites=O.sites) O.I = spatial_inertia_from_sites(sites=O.sites, alignment_T=O.A.T0b) # O.wells = shift_gently(sites=O.sites, mersenne_twister=mersenne_twister) # qE = matrix.col((0,0,0)) qr = matrix.col((0,0,0)) O.J = joint_lib.six_dof(type="euler_params", qE=qE, qr=qr, r_is_qr=True) O.qd = O.J.qd_zero
def __init__(O, mersenne_twister, n_sites): if (n_sites > 0): O.sites = [matrix.col(mersenne_twister.random_double_point_on_sphere())] while (len(O.sites) != n_sites): O.sites.append(O.sites[0] + matrix.col(mersenne_twister.random_double_point_on_sphere())) O.A = joint_lib.six_dof_alignment(sites=O.sites) O.I = spatial_inertia_from_sites(sites=O.sites, alignment_T=O.A.T0b) # O.wells = create_wells(sites=O.sites, mersenne_twister=mersenne_twister) # qE = matrix.col(mersenne_twister.random_double(size=4)).normalize() qr = matrix.col(mersenne_twister.random_double(size=3)-0.5) O.J = joint_lib.six_dof(type="euler_params", qE=qE, qr=qr, r_is_qr=True) O.qd = matrix.col(mersenne_twister.random_double(size=6)*2-1)
def __init__(O, labels, sites, bonds, mersenne_twister): O.labels = labels O.sites = sites O.bonds = bonds O.A = joint_lib.six_dof_alignment(sites=O.sites) O.I = spatial_inertia_from_sites(sites=O.sites, alignment_T=O.A.T0b) # O.wells = shift_gently(sites=O.sites, mersenne_twister=mersenne_twister) # qE = matrix.col((0, 0, 0)) qr = matrix.col((0, 0, 0)) O.J = joint_lib.six_dof(type="euler_params", qE=qE, qr=qr, r_is_qr=True) O.qd = O.J.qd_zero
def __init__(O, six_dof_type, r_is_qr, mersenne_twister): O.sites_F0 = create_triangle_with_random_center_of_mass( mersenne_twister=mersenne_twister) O.A = joint_lib.six_dof_alignment(sites=O.sites_F0) O.I_spatial = spatial_inertia_from_sites( sites=O.sites_F0, alignment_T=O.A.T0b) # O.wells = test_utils.create_wells( sites=O.sites_F0, mersenne_twister=mersenne_twister) # qE = matrix.col(mersenne_twister.random_double(size=4)).normalize() qr = matrix.col(mersenne_twister.random_double(size=3)-0.5) if (r_is_qr): qr = joint_lib.RBDA_Eq_4_12(qE).transpose() * qr O.J = joint_lib.six_dof(type=six_dof_type, qE=qE, qr=qr, r_is_qr=r_is_qr) O.qd = matrix.col(mersenne_twister.random_double(size=6)*2-1) # O.energies_and_accelerations_update()
def d_pot_d_q_via_finite_differences(O, eps=1.e-6): result = [] for q in [O.J.qE, O.J.qr]: for i in xrange(len(q)): fs = [] for signed_eps in [eps, -eps]: q_eps = list(q) q_eps[i] += signed_eps q_eps = matrix.col(q_eps) if (q is O.J.qE): qE = q_eps; qr=O.J.qr else: qE = O.J.qE; qr=q_eps J = joint_lib.six_dof( type=O.J.type, qE=qE, qr=qr, r_is_qr=O.J.r_is_qr) e_pot = test_utils.potential_energy( sites=O.sites_F0, wells=O.wells, A=O.A, J=J) fs.append(e_pot) result.append((fs[0]-fs[1])/(2*eps)) return matrix.col(result)