I'm one of the developers behind this functionality, so I might be biased, but in my opinion this does provide a huge new feature set to Mathematica users.
What practical use do these new functions have for those who don't
have the full SystemModeler?
The new functions provide a sophisticated analysis environment for system modeling. They do that stand-alone, without requiring SystemModeler. The only new function that requires SystemModeler to work, is the symbol SystemModeler, since it exists purely for workflow interaction with that application.
System modeling in this context is indeed based on the Modelica language, which is used to describe systems of differential equations.
The new functions add tools for:
- Simulating these models (SystemModelSimulate, SystemModelParametricSimulate, SystemModelSimulateSensitivity)
- Building new models programatically (CreateSystemModel, ConnectSystemModelComponents, CreateDataSystemModel)
- Doing analysis on models and their simulation results. This can use all of the existing symbolic and numeric tools provided by Wolfram Language. There are also some functions for linearizing models into the control systems objects in Wolfram Language.
What this provides beyond NDSolve
Many models written in Modelica can be expressed in equation form usable in NDSolve
. In fact, SystemModelSimulate
takes a Method
option to use NDSolve
as the solver. However, the Modelica modeling language and the SystemModeler kernel and solvers also have features that NDSolve does not have (at least, yet).
But primarily, building up the equations for NDSolve
by hand quickly becomes a daunting proposition. You also need to figure out every single equation by yourself.
With Modelica and SystemModel
, you get the "building block" approach. You are provided with a wide range of pre-built components you can just use and combine. To take a simple example, it comes with a lot of electrical components like resistors, capacitors, ... The library that comes with the product(s) includes a lot more domains.
There are also more libraries available (free and commercial) that are tested by Wolfram. Of course, there is also a wider selection of Modelica libraries out there.
From these components, you typically build up your hierarchical model of more advanced components. This leads to a far superior workflow over pure NDSolve
equations, as soon as you get above a handful of equations (which any real world system is likely to have). System modeling enables you to model vastly more complex systems.
What does SystemModeler provide beyond that?
The product SystemModeler still exists apart from Wolfram Language/Mathematica, as you noted.
It provides a graphical interface for creating and modifying models (Model Center). This is almost a requirement when developing deeply hierarchical models of advanced systems.
Model Center in SystemModeler
has wider support for more advanced modeling features. It is technically possible to create models using all these features using pure Modelica and using ImportString
as in the question, but that quickly becomes untenable in practice for larger models.
It can also be easier to understand and explore hierarchical models in a graphical user interface.
SystemModeler also provides a simulation interface (Simulation Center), which provides things like interactive plots and 3D animations of mechanical systems.
when one would want to use it and write Modelica code from scratch
To start with, most users would probably use the provided model creation functions. Those create the Modelica code for you (and give you the result back in the form of a SystemModel
). Writing Modelica code from scratch is getting into pretty advanced territory, and my personal feeling is that when you arrive at that point, you would probably benefit from the graphical SystemModeler environment.
The intended primary customer for the SystemModeler product is users who build their own models. The new functions in Wolfram Language are also for those users, but widens the audience to "consumers" of models, for example people running an analysis on a model someone else built.
SystemModelSimulate[]
calls Visual Studio to compile some C and creates a Executable. This is totally new compared toNDSolve[]
$\endgroup$