Good initiative to collect discussion in “System Dynamics packages”. To me, tools such as the DifferentialEquations package is essential to “sell” Julia to control engineers (like myself ). However, tools such as Modia would be great for reuse of models and building libraries.
Currently, many control engineers use MATLAB – which has a number of great and well documented toolboxes for control analysis/design. Python, on the other had is relatively starved with control packages, and because of that relatively few control engineers use Python. Mathematica and Maple have some packages.
A basic control package should probably include methods for extracting linear approximations of models (inputs are typically denoted “u”, states and more generally: descriptors are denoted “x”, and outputs are typically denoted “y” – don’t know whether there is a conflict with DifferentialEquations package and use of “u” for unknown…). In order to progress from the LTI model of MATLAB, why not generalize the LTI model to include linear DAEs and PDEs? (Time delay is simply the solution of the advection PDE – many more forms can be included by having general linear PDEs…). A basic package should then allow:
- Block diagram manipulation (tricky with PDEs?)
- Solution of the LTI (step response, impulse response – could use DifferentialEquations package)
- Frequency response presentation (AFF, Nyquist, Nichols) from transfer matrices (elementwise, max singular value, etc.)
- Model reduction (discretization of PDEs, order reduction, etc.)
- Poles and zeros
- Basic control design
In addition to extracting LTIs from DifferentialEquations and Modia type tools, why not automate the extraction of (di)graph representation? This is very useful for analysis of structured controllability and observability analysis – comes in handy for large scale problems (national energy grids, etc.).
Linear models can also be useful for more advanced control packages (Linear Systems Theory studies such as Smith/Smith-McMillan form, Kalman decomposition, etc., work on Matrices of Polynomials, etc., Geometric control theory, etc.).
OK – this is just a start of what can be done. Much can be done by integrating optimization tools. Linear Matrix Inequalities. Other robust design tools. Optimal Control is already utilizing integration with DifferentialEquations, I think (NLOptControl) – similar ideas exist in the Modelica community, with an extension of model classes with Optimica (could become part of Modia?) There is a lot of possibilities within nonlinear control theory. Can tools be developed based on macros, etc.? What about identifiability analysis? Etc.
What about good tools to handle time series/experimental data? I’m sure tools from other domains of Julia can be used. What about “LabVIEW”-like tools for presenting user interfaces? APIs for reading from instruments/logging cards? (Possibility to use National Instruments logging cards, connected to a computer via USB connectors? Etc.)
Anyway, it is encouraging to see several initiatives related to control packages. It is natural that these are partially “competing” at this early stage; I think this boosts creativity. At some stage, it is probably smart to end up with some LTI model form, and then use this as a platform for other tools. Of course, it is possible to use the tried and true MATLAB structure. But why not – at least – consider more general forms?
OK – these were some “rambling” thoughts. Myself, I’m an “engineer” and more of a user than a coder. But I’d be willing to contribute in development of ideas, testing of tools, and documentation. (And perhaps some development.)