(self, FL, BL)
Method to form Kane's equations, Fr + Fr* = 0.

        Returns (Fr, Fr*). In the case where auxiliary generalized speeds are
        present (say, s auxiliary speeds, o generalized speeds, and m motion
        constraints) the length of the returned vectors will be o - m + s in
        length. The first o - m equations will be the constrained Kane's
        equations, then the s auxiliary Kane's equations. These auxiliary
        equations can be accessed with the auxiliary_eqs().

        Parameters
        ==========

        FL : list
            Takes in a list of (Point, Vector) or (ReferenceFrame, Vector)
            tuples which represent the force at a point or torque on a frame.
        BL : list
            A list of all RigidBody's and Particle's in the system.
Method to form Kane's equations, Fr + Fr* = 0.
Method to form Kane s equations Fr + Fr * = 0 .
def kanes_equations(self, FL, BL):
        """ Method to form Kane's equations, Fr + Fr* = 0.

        Returns (Fr, Fr*). In the case where auxiliary generalized speeds are
        present (say, s auxiliary speeds, o generalized speeds, and m motion
        constraints) the length of the returned vectors will be o - m + s in
        length. The first o - m equations will be the constrained Kane's
        equations, then the s auxiliary Kane's equations. These auxiliary
        equations can be accessed with the auxiliary_eqs().

        Parameters
        ==========

        FL : list
            Takes in a list of (Point, Vector) or (ReferenceFrame, Vector)
            tuples which represent the force at a point or torque on a frame.
        BL : list
            A list of all RigidBody's and Particle's in the system.

        """

        if (self._q is None) or (self._u is None):
            raise ValueError('Speeds and coordinates must be supplied first.')
        if (self._k_kqdot is None):
            raise __KDEqError


        fr = self._form_fr(FL)
        frstar = self._form_frstar(BL)
        if self._uaux != []:
            if self._udep == []:
                km = KanesMethod(self._inertial, self._q, self._uaux,
                             u_auxiliary=self._uaux)
            else:
                km = KanesMethod(self._inertial, self._q, self._uaux,
                u_auxiliary=self._uaux, u_dependent=self._udep,
                velocity_constraints=(self._k_nh * Matrix(self._u) + self._f_nh))
            km._qdot_u_map = self._qdot_u_map
            self._km = km
            fraux = km._form_fr(FL)
            frstaraux = km._form_frstar(BL)
            self._aux_eq = fraux + frstaraux
            self._fr = fr.col_join(fraux)
            self._frstar = frstar.col_join(frstaraux)
            return (self._fr, self._frstar)
        else:
            return (fr, frstar)
def kanes_equations ( self , FL , BL ) : if ( self . _q is None ) or ( self . _u is None ) : raise ValueError ( 'Speeds and coordinates must be supplied first.' ) if ( self . _k_kqdot is None ) : raise __KDEqError fr = self . _form_fr ( FL ) frstar = self . _form_frstar ( BL ) if self . _uaux != [ ] : if self . _udep == [ ] : km = KanesMethod ( self . _inertial , self . _q , self . _uaux , u_auxiliary = self . _uaux ) else : km = KanesMethod ( self . _inertial , self . _q , self . _uaux , u_auxiliary = self . _uaux , u_dependent = self . _udep , velocity_constraints = ( self . _k_nh * Matrix ( self . _u ) + self . _f_nh ) ) km . _qdot_u_map = self . _qdot_u_map self . _km = km fraux = km . _form_fr ( FL ) frstaraux = km . _form_frstar ( BL ) self . _aux_eq = fraux + frstaraux self . _fr = fr . col_join ( fraux ) self . _frstar = frstar . col_join ( frstaraux ) return ( self . _fr , self . _frstar ) else : return ( fr , frstar )