Impulse-based dynamic simulation using the iterative method results in relatively simple algorithms which are easy to implement. However, two important theoretical questions have so far still remained open: (1) In what situations does the iterative procedure converge or diverge, and how can divergence be avoided? (2) Does the impulse-based simulation converge towards the exact solution of the dynamics problem as the step size is reduced? We will completely answer both questions in this paper. First we simplify the argumentation in that we prove that for every multibody system there is a dynamically and kinematically equivalent point mass system. Hence, our results on point mass systems also apply to multibody simulations. Next we show how to replace the iterative procedures by solving systems of linear equations. We prove that the matrices of these equation systems are non-singular if redundant constraints are removed from the point mass system in question. We prove further that the solution generated by the impulse-based procedure converges towards the exact solution of the dynamics problem as the step size is reduced towards zero. The proof is based on a detailed comparison of the impulse-based integration expression and the Taylor series solution. It is well known that the latter converges to the exact solution of the dynamics problem if a Lipschitz condition is satisfied.

Comparison with the standard numerics on the basis of Lagrange multipliers shows significant advantages for the impulse-based method because the latter is completely free of drift problems, and stabilizations in the sense of Baumgarte are unnecessary. Because of the existence of methods of higher order, we can finally conclude that the impulse-based method is superior to the method with Lagrange multipliers.

@TechReport{Schmitt05_17,

author = "Alfred Schmitt and Jan Bender and Hartmut Prautzsch",

title = "On the Convergence and Correctness of Impulse-Based Dynamic Simulation",

institution = "University of Karlsruhe",

year = "2005",

type = "Technical Report",

number = "17"

}