前回に続いてopen modelicaのJulia APIOMJulia
を使用して計算モデルを解析していきます。
前回の記事は↓こちら
パラメーターの感度分析
パラメーターの感度分析とは、あるパラメーターの変化がシステムのアウトプット変数にどれだけ影響を与えるかを分析する手法です。
仮にアウトプット変数を、パラメーターを
とすると、Open Modelicaは感度として
を計算します。
この機能を実際に使用してみます。
計算モデル自体は前回と同様のものを使用します。
記号 | 意味 | Head3 |
---|---|---|
|
水の流入速度 | kg/s |
|
タンク内の水量 | kg |
|
水の流出速度 | kg/s |
|
タンク内の水体積 | dm3 |
|
水の密度 | kg/L |
|
代表高さ | dm |
|
水位 | dm |
package WaterTank // Package for simulating model ModWaterTank constant Real rho = 1 "Density"; parameter Real A = 5, K=5, h_s=3; parameter Real h_0=0.5, m_0=rho*h_0*A; Real m(start=m_0,fixed=true) "Mass in tank, kg"; Real V, md_e; input Real md_i; output Real h; equation der(m) = md_i - md_e; m = rho*V; V = A*h; md_e = K*sqrt(h/h_s); end ModWaterTank; //End package end WaterTank;
OMJuliaでの感度解析コマンドはsensitivity()
ですので、その命令を使用するJuliaコードを書きます。
using Plots using OMJulia tnk = OMJulia.OMCSession(); tnk.ModelicaSystem("WaterTank.mo","WaterTank.ModWaterTank"); tnk.setInputs("md_i=3"); a = ["A"]; y = ["h"]; r1,r2 = tnk.sensitivity(a,y); plot(tm,r2,title="sensitivity analysis",xlabel="time [s]",ylabel="sensitivity");
今回、パラメーターをA(タンクの断面積)、出力変数をh(水位)として、シミュレーション時間(10秒)時々のの値を計算してプロットします。
このように面倒な感度分析を1行で出来てしまうのもOpen Modelicaの価値の一つだと考えています。
短いですが今回はここまでにします。