As part of my B.Eng project along with a Genetic Algorithm Optimization Tool I designed and implemented a magnetic levitation train simulator. This was based around a numerical model written as a system of non-linear ODEs.
The integration algorithm was split into linear and non-linear parts. The linear parts were solved using a LU-decomposition to speed up the matrix inversion of the Backward Euler solver. This linear solver was calculated assuming the non-linear parts were constants. These were then calculated and set to be new constant values. The process was repeated until the non-linear and linear parts agreed on the solution. This was developed from scratch in C++ using a core routine with no memory allocations, optimized carefully for speed.