Example #1
0
File: kane.py Project: royels/sympy
    def _form_fr(self, fl):
        """Form the generalized active force."""

        if not iterable(fl):
            raise TypeError('Force pairs must be supplied in an iterable.')

        N = self._inertial
        # pull out relevant velocities for constructing partial velocities
        vel_list, f_list = _f_list_parser(fl, N)
        vel_list = [i.subs(self._qdot_u_map) for i in vel_list]

        # Fill Fr with dot product of partial velocities and forces
        o = len(self._u)
        b = len(f_list)
        FR = zeros(o, 1)
        partials = partial_velocity(vel_list, self._u, N)
        for i in range(o):
            FR[i] = sum(partials[j][i] & f_list[j] for j in range(b))

        # In case there are dependent speeds
        if self._udep:
            p = o - len(self._udep)
            FRtilde = FR[:p, 0]
            FRold = FR[p:o, 0]
            FRtilde += self._Ars.T * FRold
            FR = FRtilde

        self._fr = FR
        return FR
Example #2
0
File: kane.py Project: Lenqth/sympy
    def _form_fr(self, fl):
        """Form the generalized active force."""
        if fl != None and (len(fl) == 0 or not iterable(fl)):
            raise ValueError('Force pairs must be supplied in an '
                'non-empty iterable or None.')

        N = self._inertial
        # pull out relevant velocities for constructing partial velocities
        vel_list, f_list = _f_list_parser(fl, N)
        vel_list = [msubs(i, self._qdot_u_map) for i in vel_list]

        # Fill Fr with dot product of partial velocities and forces
        o = len(self.u)
        b = len(f_list)
        FR = zeros(o, 1)
        partials = partial_velocity(vel_list, self.u, N)
        for i in range(o):
            FR[i] = sum(partials[j][i] & f_list[j] for j in range(b))

        # In case there are dependent speeds
        if self._udep:
            p = o - len(self._udep)
            FRtilde = FR[:p, 0]
            FRold = FR[p:o, 0]
            FRtilde += self._Ars.T * FRold
            FR = FRtilde

        self._forcelist = fl
        self._fr = FR
        return FR
Example #3
0
 def _partial_velocity(self, vlist, ulist, frame):
     """Returns the list of partial velocities, replacing qdot's in the
     velocity list if necessary.
     """
     if self._qdot_u_map is None:
         raise ___KDEqError
     v = [vel.subs(self._qdot_u_map) for vel in vlist]
     return partial_velocity(v, ulist, frame)
Example #4
0
 def _partial_velocity(self, vlist, ulist, frame):
     """Returns the list of partial velocities, replacing qdot's in the
     velocity list if necessary.
     """
     if self._qdot_u_map is None:
         raise ___KDEqError
     v = [vel.subs(self._qdot_u_map) for vel in vlist]
     return partial_velocity(v, ulist, frame)
Example #5
0
 def get_partial_velocity(body):
     if isinstance(body, RigidBody):
         vlist = [body.masscenter.vel(N), body.frame.ang_vel_in(N)]
     elif isinstance(body, Particle):
         vlist = [body.point.vel(N)]
     else:
         raise TypeError("The body list may only contain either " "RigidBody or Particle as list elements.")
     v = [vel.subs(self._qdot_u_map) for vel in vlist]
     return partial_velocity(v, self.u, N)
Example #6
0
 def get_partial_velocity(body):
     if isinstance(body, RigidBody):
         vlist = [body.masscenter.vel(N), body.frame.ang_vel_in(N)]
     elif isinstance(body, Particle):
         vlist = [body.point.vel(N),]
     else:
         raise TypeError('The body list may only contain either '
                         'RigidBody or Particle as list elements.')
     v = [msubs(vel, self._qdot_u_map) for vel in vlist]
     return partial_velocity(v, self.u, N)
Example #7
0
def test_partial_velocity():
    q1, q2, q3, u1, u2, u3 = dynamicsymbols('q1 q2 q3 u1 u2 u3')
    u4, u5 = dynamicsymbols('u4, u5')
    r = symbols('r')

    N = ReferenceFrame('N')
    Y = N.orientnew('Y', 'Axis', [q1, N.z])
    L = Y.orientnew('L', 'Axis', [q2, Y.x])
    R = L.orientnew('R', 'Axis', [q3, L.y])
    R.set_ang_vel(N, u1 * L.x + u2 * L.y + u3 * L.z)

    C = Point('C')
    C.set_vel(N, u4 * L.x + u5 * (Y.z ^ L.x))
    Dmc = C.locatenew('Dmc', r * L.z)
    Dmc.v2pt_theory(C, N, R)

    vel_list = [Dmc.vel(N), C.vel(N), R.ang_vel_in(N)]
    u_list = [u1, u2, u3, u4, u5]
    assert (partial_velocity(vel_list, u_list, N) == [[
        -r * L.y, r * L.x, 0, L.x,
        cos(q2) * L.y - sin(q2) * L.z
    ], [0, 0, 0, L.x, cos(q2) * L.y - sin(q2) * L.z], [L.x, L.y, L.z, 0, 0]])
Example #8
0
def test_partial_velocity():
    q1, q2, q3, u1, u2, u3 = dynamicsymbols('q1 q2 q3 u1 u2 u3')
    u4, u5 = dynamicsymbols('u4, u5')
    r = symbols('r')

    N = ReferenceFrame('N')
    Y = N.orientnew('Y', 'Axis', [q1, N.z])
    L = Y.orientnew('L', 'Axis', [q2, Y.x])
    R = L.orientnew('R', 'Axis', [q3, L.y])
    R.set_ang_vel(N, u1 * L.x + u2 * L.y + u3 * L.z)

    C = Point('C')
    C.set_vel(N, u4 * L.x + u5 * (Y.z ^ L.x))
    Dmc = C.locatenew('Dmc', r * L.z)
    Dmc.v2pt_theory(C, N, R)

    vel_list = [Dmc.vel(N), C.vel(N), R.ang_vel_in(N)]
    u_list = [u1, u2, u3, u4, u5]
    assert (partial_velocity(vel_list, u_list, N) ==
            [[- r*L.y, r*L.x, 0, L.x, cos(q2)*L.y - sin(q2)*L.z],
            [0, 0, 0, L.x, cos(q2)*L.y - sin(q2)*L.z],
            [L.x, L.y, L.z, 0, 0]])