Paired with the recent free online Model Thinking class, this could help introduce complexity concepts to beginners possibly ... $35 is nice for a semester license. I wonder if you could really expose a "swiss cheese" model of a problem situation? Anyway... complexity is of course complex, but not necessarily insurmountable or unknowable, so it is really wonderful that we're ever pushing the bar higher to educate about normal accidents and such (this has been the bane of my existence in stupid enterprise software sometimes :P)
Yes, in fact an up and coming discipline for this is called model based systems engineering - data driven, model based development of systems (including software systems). The main tool in this area is UML/SysML, but it looks like there is a Modelica-SysML transformation out there.
I would have liked to have seen an IT/network/software example on the SystemModeller examples page as this could be an interesting tool in that area.
Edit: just to point out, UML has been around for a while for this purpose, and SysML is an extension for development of systems in general not just software.
http://pathwaysystems.com Blueprints product (disclosure: I work there) is an Enterprise IT modeling system often used to model legacy systems or custom developed solutions. Wolfram's product looks to be designed for a much more technical audience than the typical sysadmin, network admin or developer. We have a simulation component in our product, but it's mainly the document/query/analyze/share/discuss/report use cases that deliver most of the value in the Enterprise IT setting.
Seems neat. It's really hard to know whether Wolfram is a visionary or a lunatic (and by extension, whether the suite of Wolfram products are ahead of their time or just shiny recapitulations of existing tech).
For example, in his "A New Kind of Science", he basically takes credit for the entire field of complex systems theory and presents lots of previously known information (very verbosely) as though it were original research.
While mostly agree with your criticism of NKS, in Wolfram's defense, I have personally found Mathematica to be a joy to use. Under its unfortunate syntax, there's a great functional programming language there. While you can do many of the same things in Matlab or Octave, I always prefer to use Mathematica.
There are many respects in which Mathematica is an exceedingly well designed language. It falls down in some areas. Perhaps the Part syntax [[..]] is a bit clunky, but I think for the most part the syntax is actually pretty great.
Here's a rough list of things that I think make it stand out, written for someone who might not be familiar at all with it.
0) Functional style
A common style of functional programming involves building up quite complex data structures in an add hoc way using lists, symbols, rules, and so on, and then successively transforming these structures. Mathematica excels at this, having more 'neat' high-level functions to work with such ad hoc data structures than I've seen in any other language.
Of course you've got the usual Map and Fold and Nest, but then you've get FoldList, NestList, MapThread, MapIndexed, Scan, Cases, DeleteCases, Count, Select, Position, Replace, ReplacePart, ReplaceAll, SortBy, and on it goes (see http://reference.wolfram.com/mathematica/guide/FunctionalPro...). Many X also have a ParellelX that takes advantage of multiple cores.
Also, many of them use the expressive pattern matching 'sub-language' that Mathematica has. The pattern language was originally designed for writing rules that perform symbolic integration and differentiation, it turns out that the kind of flexibility you need for that is great for general purpose use. You use them all the time to get at parts of your complex expression to process them, count them, remove them, etc.
Lastly, almost all these functions have support for a 'depth spec' that enables you to say at what level or levels inside your expression you want to operate. Also useful for operating on rich data structures.
1) Uniform syntax
Like other LISPS, there is a nice and uniform s-expression syntax 'underneath' the more elaborate syntax. For example, to check the length of a list and conditionally append something, we have, If[Length[x] > 3, t++]], whose FullForm is actually If[Greater[Length[x], 3], Increment[t]].
Of course, you can use more familiar syntax, but sometimes when you're not sure of the precedence of something it can help to drop down to the explicit form.
Another nice thing about the syntax is that it makes everything serializable. Trivially. ToString[..., InputForm] produces a string version of anything, a function, a graph, a distribution, whatever. ToExpression gets it back. And you can define your own forms too, to join the other built-ins, of which there are many useful ones, like AccountingForm, ScientificForm, TeXForm, TableForm, etc..
2) Symbolic expressions
At a basic level everything is built out of lists, just like LISPs do. Well, lists with an interesting twist: the lists are 'colored', so to speak -- every list has a head, a symbol hiding behind the list, even if it is empty. So Foo[] is the empty list with the symbolic head Foo. A list like {1,2,3,4} is just a list with the symbolic head List.
All symbols (heads) are inert, and are defined just by mentioning them. But you can attach rules to the symbols that say how they should evaluate -- that is in fact how one defines functions.
In fact, the ordinary control flow constructs are exactly this: special heads that evaluate their arguments in certain unusual ways. So If will prevent its other arguments from evaluating until it knows whether its first argument evaluates to True (another symbol).
Now, this can be somewhat inefficient for tight loops, but luckily you can compile such things down (although you loose some of the fancier features, like pattern matching). Also, there is a lot of hidden optimization -- large lists of integers are transparently packed into arrays, as are matrices, and use special libraries for multiplication etc, even though you're using the same Times symbol at the top level.
Anyway, it's a very unique model.
2) Homoiconicity
Code is just data that hasn't evaluated yet. For example, I co...
Simulink was the major reason for choosing Matlab for a current project. Hope this move by Wolfram also results in improves for Simulink or in a lower price. It currently sells for around 6k.
Matlab+Simulink had no competing alternative until this.
Thanks, but I'm aware of Modelica and Scilab. In fact I have used them even more than Matlab, which I have only been using for about a month.
All the academic, hobbist and professional communities in what I'm doing use Matlab heavily and specifically. Available code/modules/"toolboxes" and support are severely lacking in Scilab and Modelica. I wish I had the time and the knowledge to contribute back but I currently don't.
This is simply a different view to model systems such as can be done in Simulink. Simulink has a (differential) equation-centric view whereas Modelica (of which SystemModeller is an implementation using the mathematical capabilities of Mathematica) has more an object-oriented view where external interfaces are exposed and connected and the behaviour as expressed by the differential equations is hidden. Modelica is a standardized language, see e.g. http://openmodelica.org for an open source implementation.
It is simply not true that there wasn't a Simulink alternative until now. Modelica exists since 1997 (cf. http://en.wikipedia.org/wiki/Modelica) and there are several commercial implementations of it: Dymola, MapleSim, MathModelica (which now in v3 has been purchased by Wolfram and has been rebranded as SystemModeller), CATIA Sytems and probably some more.
Adaption of Modelica has been slow since engineers are more exposed to Matlab/Simulink during their education and this base is slow to change. Considering license, training and experience costs this is certainly understandable. However, I know that several German car makers are gradually changing over to Modelica since the models are easier to understand for new people joining the projects (and to escape the vendor lock-in of Simulink).
Oh, wow this is really awesome. Shame I could never use it, since it's out of my price range as a hobbyist. Seems insane they don't offer pricing that covers my use case, especially with stuff like home robotics being such a big thing these days. There's no way I could afford even 1/10th of the $3.5k they want for the full version, and I'm not a student so I couldn't buy the $75 student version. I'd have no problem paying $150-200, just to play around with this.
You could always register for a class at your local community college to get the necessary student ID. But I agree, a 'home user/general nerd' version would be great, possibly with limitations on export or suchlike.
I'm interested in playing with it too, although strangely there doesn't seem to be any way to get audio or MIDI into or out of it, which is a pity. I'm sure it wouldn't be too difficult to add on, since Mathematica has that sort of thing built in.
In WSM it's possible to create models that call external function in DLLs. I've been using a modelica wrapper to the oscpack library (http://www.rossbencina.com/code/oscpack) that allows sending and receiving simple OSC messages. This makes it possible to communicate with music applications that implement OSC.
I've been using it to send input signals from an iPhone using TouchOsc.
Hm, it's not a new problem to them... Mathematica has a hobbyist license called "Home Edition" at u$d 295. Maybe if many people show interest in the same kind of licensing for this new product they'll think about it.
"Seems insane they don't offer pricing that covers my use case..... I'm not a student so I couldn't buy the $75 student version."
They do offer pricing for your use case. You simply locate a student and have them buy it for you.
They understand people are going to do this. They just don't want Boeing to get that pricing they really don't care if you do. But they aren't going to say that.
At that point is there any difference from just pirating it? You're going to be in violation of the license anyway - I'm just they have a no-transfer clause.
I think what people fail to realize (when they downvoted my comment) is that it is common for companies (based on my 30 years in business) to offer special pricing to groups but not enforce that in any way. This is much different from pirating. This is "look the other way". An example of this is Apple's educational pricing. You can get this by presenting a student id of anyone in the Apple store and you get the ed discount. You can also buy from the Apple website and simply choose a school and get the education discount on applicable products. So ask yourself why they don't police this better? Because they don't have a problem with anyone doing it otherwise they would. But they aren't going to advertise it and I'm sure an Apple salesman won't tell you about buying this way.
Why? Well another reason is it's lets them get more money out of companies. So in other words they are allowed by law to charge different prices to different groups of users (by the way why is this fair?) So they set it up as a discount to some users rather than saying "we are going to get Boeing for more because we know they can pay more".
"Symbolic-numeric" could be BS, but I'm pretty sure it's not. What might be triggering your BS alarm is the "symbolic." However this word has a precise meaning, especially in Mathematica et al's case. It basically means "replacement rules on arbitrary expressions." For example, we could define a derivative rule in this kind of way:
x^n -> n*x^(n-1)
If you have enough of these kinds of rules and a smart infrastructure around them, you can perform sophisticated "symbolic" calculations. The whole setup is similar in essence to a Lisp macro system. As a specific example, type the following into Mathematica (or WolframAlpha):
E^(I 2 Pi)
The result you get is "1". Not "1.000001", not "1 in floating point", but "1" as an exact symbol. So when they say they are using "symbolic-numeric" methods, what they mean is that they are using a combination of exact mathematical calculations (exact according to pure mathematics - thus invariably symbolic) in combination with numeric approximation/heuristic methods
I use Maxima daily, so I get "symbolic". I called BS because they provide no details, no citations, nothing to make me think they have advanced over Maxima, or even GCC in terms of optimization of arbitrary computations.
Perhaps more importantly, just because one can build a model does not mean one will understand the model or the system be modeled. No software will provide us with good interpretations of our models and their output.
Well, since both are implementations of the Modelica standard I would guess they are pretty much the same, though I do not know MapleSim or your problems with it.
if it's like Mathematica vs MATLAB, then it will be much less unpleasant to use. one of the reasons i like Mathematica is the consistent respect for UI/UX
Yep, its must be as awesome as Simulink. But in most real world examples you should use more basic programming languages in order to feel all process (handle discretization or numerical integration manually). In Simulink you connect couple block and thats it... everything important are hidden behind the scene.
33 comments
[ 4.2 ms ] story [ 84.7 ms ] threadIt seems like being able to model enterprise apps could be important for complex legacy systems.
I would have liked to have seen an IT/network/software example on the SystemModeller examples page as this could be an interesting tool in that area.
Edit: just to point out, UML has been around for a while for this purpose, and SysML is an extension for development of systems in general not just software.
For example, in his "A New Kind of Science", he basically takes credit for the entire field of complex systems theory and presents lots of previously known information (very verbosely) as though it were original research.
http://maxima.sourceforge.net/
Here's a rough list of things that I think make it stand out, written for someone who might not be familiar at all with it.
0) Functional style
A common style of functional programming involves building up quite complex data structures in an add hoc way using lists, symbols, rules, and so on, and then successively transforming these structures. Mathematica excels at this, having more 'neat' high-level functions to work with such ad hoc data structures than I've seen in any other language.
Of course you've got the usual Map and Fold and Nest, but then you've get FoldList, NestList, MapThread, MapIndexed, Scan, Cases, DeleteCases, Count, Select, Position, Replace, ReplacePart, ReplaceAll, SortBy, and on it goes (see http://reference.wolfram.com/mathematica/guide/FunctionalPro...). Many X also have a ParellelX that takes advantage of multiple cores.
Also, many of them use the expressive pattern matching 'sub-language' that Mathematica has. The pattern language was originally designed for writing rules that perform symbolic integration and differentiation, it turns out that the kind of flexibility you need for that is great for general purpose use. You use them all the time to get at parts of your complex expression to process them, count them, remove them, etc.
Lastly, almost all these functions have support for a 'depth spec' that enables you to say at what level or levels inside your expression you want to operate. Also useful for operating on rich data structures.
1) Uniform syntax
Like other LISPS, there is a nice and uniform s-expression syntax 'underneath' the more elaborate syntax. For example, to check the length of a list and conditionally append something, we have, If[Length[x] > 3, t++]], whose FullForm is actually If[Greater[Length[x], 3], Increment[t]].
Of course, you can use more familiar syntax, but sometimes when you're not sure of the precedence of something it can help to drop down to the explicit form.
Another nice thing about the syntax is that it makes everything serializable. Trivially. ToString[..., InputForm] produces a string version of anything, a function, a graph, a distribution, whatever. ToExpression gets it back. And you can define your own forms too, to join the other built-ins, of which there are many useful ones, like AccountingForm, ScientificForm, TeXForm, TableForm, etc..
2) Symbolic expressions
At a basic level everything is built out of lists, just like LISPs do. Well, lists with an interesting twist: the lists are 'colored', so to speak -- every list has a head, a symbol hiding behind the list, even if it is empty. So Foo[] is the empty list with the symbolic head Foo. A list like {1,2,3,4} is just a list with the symbolic head List.
All symbols (heads) are inert, and are defined just by mentioning them. But you can attach rules to the symbols that say how they should evaluate -- that is in fact how one defines functions.
In fact, the ordinary control flow constructs are exactly this: special heads that evaluate their arguments in certain unusual ways. So If will prevent its other arguments from evaluating until it knows whether its first argument evaluates to True (another symbol).
Now, this can be somewhat inefficient for tight loops, but luckily you can compile such things down (although you loose some of the fancier features, like pattern matching). Also, there is a lot of hidden optimization -- large lists of integers are transparently packed into arrays, as are matrices, and use special libraries for multiplication etc, even though you're using the same Times symbol at the top level.
Anyway, it's a very unique model.
2) Homoiconicity
Code is just data that hasn't evaluated yet. For example, I co...
Matlab+Simulink had no competing alternative until this.
http://www.scilab.org/products/xcos
All the academic, hobbist and professional communities in what I'm doing use Matlab heavily and specifically. Available code/modules/"toolboxes" and support are severely lacking in Scilab and Modelica. I wish I had the time and the knowledge to contribute back but I currently don't.
It is simply not true that there wasn't a Simulink alternative until now. Modelica exists since 1997 (cf. http://en.wikipedia.org/wiki/Modelica) and there are several commercial implementations of it: Dymola, MapleSim, MathModelica (which now in v3 has been purchased by Wolfram and has been rebranded as SystemModeller), CATIA Sytems and probably some more.
Adaption of Modelica has been slow since engineers are more exposed to Matlab/Simulink during their education and this base is slow to change. Considering license, training and experience costs this is certainly understandable. However, I know that several German car makers are gradually changing over to Modelica since the models are easier to understand for new people joining the projects (and to escape the vendor lock-in of Simulink).
I'm interested in playing with it too, although strangely there doesn't seem to be any way to get audio or MIDI into or out of it, which is a pity. I'm sure it wouldn't be too difficult to add on, since Mathematica has that sort of thing built in.
The language is quite complicated, though, and not all programs can run all well-formed simulation problems.
They do offer pricing for your use case. You simply locate a student and have them buy it for you.
They understand people are going to do this. They just don't want Boeing to get that pricing they really don't care if you do. But they aren't going to say that.
Why? Well another reason is it's lets them get more money out of companies. So in other words they are allowed by law to charge different prices to different groups of users (by the way why is this fair?) So they set it up as a discount to some users rather than saying "we are going to get Boeing for more because we know they can pay more".
Reason there is modeling an art be.
"new generation of hybrid symbolic-numeric methods,"
a sense of B.S., this does alerts strongly in me.
- yoda
Perhaps more importantly, just because one can build a model does not mean one will understand the model or the system be modeled. No software will provide us with good interpretations of our models and their output.