Eigen, wrapped
A mature linear-algebra library doing the work, behind an interface that is ours — so the dependency is an implementation detail rather than part of your build.
What is underneath
The numerics are Eigen. Beyond dense linear algebra, the modules in use are Polynomials, Matrix Functions, Splines, FFT, Numerical Differentiation and Levenberg–Marquardt — which is why root finding, matrix exponentials, spline fitting, spectra and nonlinear least squares all behave like solved problems rather than things the product had to reinvent.
What you write against
You use ICoreMatrix and its neighbours. Nothing outside the numerics module names
an Eigen type, and that is enforced by an automated check rather than left to discipline: the
whole rest of the product asks the wrapper, exactly as your code would.
Why the wrapping is the point
A library that exposes its dependencies makes them yours: your build needs them, your headers carry them, and your code moves when they move. Here the boundary is deliberate and checked, so the version in use is our problem, and the interface you compiled against last year is the one you compile against now.
It also means the numerics have exactly one home. When a capability is missing, it is added inside the wrapper rather than reached around — so there is one place to look, and one place where it can be made fast.
See also: The maths in one place · Global solvers, per-rate subsystems
See it run on your own model.
Download the application from the customer portal, or read the documentation first — the manual, every block with its measured response, and the full command reference are public.