Modelicaプログラミング練習その2
こんにちは!Otepipiです。今回もModelicaを使ってプログラミングしていきたいと思います。 Modelicaの特徴である非因果的モデルを実装していきます。
例題としては下記教科書の、流通式完全混合槽モデルを作成していきたいと思います。
基礎式から学ぶ化学工学: Excelによるモデル解法で直観的にわかる
- 作者: 伊東章
- 出版社/メーカー: 化学同人
- 発売日: 2017/11/28
- メディア: 単行本
- この商品を含むブログを見る
シミュレーション開始時に流入してくる物質A濃度CAが0から1にステップ応答した場合の槽内物質A濃度Cの経時変化を求めます。 (槽内濃度ははじめは0ですが、時間が経つにつれ1に近づいていくことは直感的にわかります) 今回の対象を数理モデル化するには、物質Aについて物質収支の考え方を用います。
混合槽内の物質Aの変化量 = 流入する物質Aの量 ー 流出する物質Aの量 より
$$V \frac{dC}{dt}=F \times CA - F \times C$$
この基礎式をModelicaで実装します。
model example1 //流通式完全混合槽内ステップ応答; Real C (start=0, unit="mol/m3") ; //混合槽内温度 parameter Real V(unit="m3")= 10;//混合槽体積 parameter Real F(unit = "m3/s") =1;//流量 parameter Real CA(unit = "mol/m3")=1; //流入濃度 equation V*der(C) = F * CA - F * C; end example1;
これは非因果的モデルで記述されています。今求めたいのは混合槽内の濃度Cですが コードのどこにも" C=……" といった記述はありません。このように出力Cを明確に規定しなくても コンパイル時に判断してCを求めてくれます。そのため基礎式の形を保ったままコーティングすることが可能です。 これが非因果的モデリングの大きなメリットです。
結果として下のようなグラフが得られます。
また、非因果的モデルを構築していますので、先程のコードからC以外の値も求めることができます。 例としてCの時間微分der(C)を求めてみます。
このようにプロットできます。