忘却の微分方程式(7) OMnotebookでModelicaを学ぶ

JosephHalfmoon
JosephHalfmoon

前回は、つい易きに流れてブロック図の方に行ってしまいました。これでもかなりな事は出来そうだし、第一に絵が面白いです。でもね、どうもModelicaというものをちゃんと知るためには、「Modelica言語」を避けては通れないみたいです。例によって楽して学べるものはないかいな、とインストールされたソフトウエアをみてみると、ありました。OMNotebookというものが。

多分、Pythonなど使われている方は多いのではないかと思うので、PythonにおけるJupyter Notebookにあたるものが、OpenModelicaにおけるOMNotebookだと説明したら良いでしょうか(Jupyter Notebookをインストールもしていないのでおこがましいですが。)使った経験のあるものと言えば、Matlabにも似たものがあり、Maximaにもあり。ともかく、

  • ワープロみたいに文書書いて、図なども貼り付けられる。
  • コードを書いて、それを実行し、その結果を取り込んで表示できる。
  • グラフも描ける

まあ、一本のファイルの中に、メモ書きなのか、偉大な論文なのかは別にして、自然言語とコンピュータ言語と実行結果とを混在して保存できる、場合によっては再び実行もできる、というのは、便利なものです。どうもその源流は、Mathematica らしいですが、私は良く知りません。

このOMNotebookを開くとこれが「学び」に向いていることが直ぐに分かります。開いた瞬間にデフォルトで

DrModelica

という「学び」のためのノートブックが開くのです。これに書かれた説明を読み、例題を実行し、そしてExerciseにとり組む、と。そうしてトレーニングしていけば、きっと立派に学べることは必定。

しかしね、すみません、それほどドップリもやってられない。Exerciseを大事だけれど、先のない年寄りはパスしてもよかろう。まあ、DrModelicaを適当に拾い読みしつつ、なるべく急いでひととおり眺めよう、と考えました。

さっさと別Windowsで MyHelloWorldなる自分のノートブックを開きました。下にあるとおり、「TEXTセル」では、ちゃんと日本語使えますし、フォントや文字サイズも変えられます。ただし、基本「CELL」毎の設定なので、ワープロソフトとはいかない。

紫色の部分が、「Inputセル」で、ここにModelicaの言語でコードを書き、SHIFT+Enterすれば、結果がその下に得られます。ここで一つご注意を。

「Simulate」すると、例によって裏側でC言語のコードが自動生成され、コンパイルされてから実行されます。その間、evaluating expressionと表示され、しばらく時間が掛かります。上のHelloWorldの例(ちゃんとDrModelicaの最初は、HelloWorldだった。これからやれ、ということだな)ですら、裏側で生成される、Cのソースファイルは合計20本もありました。コンパイル、リンク後の実行ファイルであるHelloWorld.exeのサイズは37513KBもあります。時間もさることながら、大量のソースやら、ヘッダやら、オブジェクトファイルやらが「まき散らかされる」ので、ちゃんと作業用のディレクトリに入ってから始めることをお勧めしますです。

cd(“作業デレクトリへのパス”)

というコードを最初のInputセルで実行しておけば大丈夫。

なお、実行結果のデータ自体は、クラス名_res.matなるバイナリファイルに格納されている模様。plot()関数に、変数を渡してやれば、グラフも描けましたが、どうもグラフを描くためにはJavaが必要みたいです(どこかに書いてあった気がする。)

さて、いくつか例題をコピペで動かし、Van der Pol Modelに至りました。短いコードですが、ちょっとカッコイイ。こんな感じ。

時間軸に対して変数をプロットするときは、plotですが、plotParametric使えば、リサージュ図形のようにxyでプロットもできる。カオスな感じ、でてるかな~

カオスな感じのモデルを眺めながら、まず最初の疑問。

最初はclassといって書き始めたけれど、何時の間にか modelになっている。これはどういうこと。調べてみると、classに似たものが沢山あるのです。

  • model
  • record
  • type
  • connector
  • block
  • function
  • package

まだ全然調べきれてないのですが、大本がclassであって、上のものどもは「特殊化した」classだということ。「特殊化」しているので、classのようになんにでもなれるわけではなく、制限もあるけれど、用途に応じた利用がしやすいみたい。こいつらを端から学んでいけば、ついには全貌が明らかになるのか?

そういえば、classというからには、インスタンス化とかあるよね。

どうも、上の実行方法では、インスタンス化もせず実行していたみたい。そこでインスタンス化を試みました。以下のとおり。

ちゃんと、VanDerPolモデルを雛形にして、パラメータlambdaを変更したインスタンスvdpというものが作れました。このプロット結果は、こんな感じ。

なんか、カオスな感じ、ちょっと変わったな~。

忘却の微分方程式(6) OpenModelica、触ってみる へ戻る

忘却の微分方程式(8) OMNotebookに手こずる へ進む