Skip to main content

QuIRK: Multibody Dynamics for MATLAB 2009+


QuIRK is an interactive Matlab command line interface for constructing systems of rigid bodies and simple joint constraints, solving the equations of motion of those systems when subject to various force expressions, displaying and animating solved systems, and extracting information about the state history and energetics of those systems. The goals of QuIRK are modularity and ease of operation rather than computational efficiency. It is based on quaternion attitude representations of bodies for full generality, and joint constraints are written in terms of the second derivative of body quaternions. Hence: Quaternion-state Interface for Rigid-body Kinetics.

Pendulum trajectory

Trajectory of an undamped double pendulum in gravity, solved and displayed by QuIRK

QuIRK uses the Udwadia-Kalaba pseudoinverse method for constructing the equations of motion of constrained systems, augmented for singular mass matrices by Udwadia and Phohomsiri, with some additions to accommodate quaternion states. For details on the math and physics of this method, see:

  • Udwadia, F. and Kalaba, R. Analytical Dynamics. Cambridge University Press, 1996.
  • Udwadia, F. and Phohomsiri, P. "Explicit equations of motion for constrained mechanical systems with singular mass matrices and applications to multi-body dynamics." Proc. R. Soc. A, vol. 462, 2006, p. 2097-2117.
  • Shoer, J. and Peck, M. "Simulation of Multibody Spacecraft Reconfiguration through Sequential Dynamic Equilibria." AIAA Guidance, Navigation, and Control Conference and Exhibit, Toronto, Canada, Aug 2-5, 2010.

Joseph Shoer wrote QuIRK in 2009-2010 as a Ph.D. candidate in the Space Systems Design Studio at Cornell University.


The QuIRK package works like the rest of the Matlab environment. You can write self-contained scripts in m-files, or you can use its functions to construct, display, and manipulate multibody systems interactively from the command line.

The important classes in QuIRK are the body, joint, force, sensor, and mBody classes. Bodies represent simple physical objects in space, joints define the kinematic structure of the multibody system, sensors let you monitor solution of the equations of motion and interrupt them when certain events occur, and mBodies are "containers" for the other objects that let you manipulate the entire system.

To learn about each of these classes, use the navigation buttons at the top of this page or select one of the following links:

The Function List page contains a reference list of the Matlab help text for all QuIRK functions, organized by class.

Back to top


The current version of QuIRK is 1.4 and it was last updated on 16 December 2010. It works with Matlab 2009a or later. Click here to download the .zip file.

Install QuIRK by extracting the .zip file to a folder on the Matlab path. The .zip file contains the QuIRK classes and functions, some supporting functions, and example scripts.

Back to top


Support for QuIRK is limited. If you have questions or comments about QuIRK, email jps87 (at) cornell (dot) edu.

For a list of possible features that may be added to QuIRK in the future, check the To Do page.

Back to top



  • Joseph Shoer

Download QuIRK

Requires MATLAB 2009 or later