Foundations of Modelica systemmodeler with Mathematica (1)
modelica 建模入门-1
为什么学习 Modelica
之前看到过一本书《模型思维》, 这段时间正好处在CoVid-2019疾病肆虐全球,偶然之间看到关于传染病学的预测模型SEIR,借着这个机会开始研究数学模型,决定重新捡起大学的时候学习的数学分析,常微分方程,偏微分方程,微分几何学等课程。接触到了Modelica这门语言,由于一直在学习Wolfram Mathematica,对Wolfram产品系列的SystemModeler颇有好感,于是下手购买了SystemModeler家庭版,购买了一本《Modelica多领域物理系统建模入门与提高》书籍,开始了对Modelica的探索,预期希望对数学模型的建立能够有一个较深刻的认识,利用数学模型预测某个事件的未来发展规律和在定量数据分析中获得更多的隐藏信息。
建立模型 - 液压系统
语言采用 Mathematica
液体不可压缩
根据Hagen-Poiseuille关系式首先建立方程组:
预设置参数:
假设两边的管子横截面积相同为1
解上述微分方程
h1, h2 的高度变化图 h1[t], h2[t]
方程组如下所示:
最后创建 SystemModeler 模型
model W8918fcdd72d8462a890fa97776822164
parameter Real g = 9.81;
parameter Real mu = 1 / 500;
parameter Real pipeDia = 0.2;
parameter Real pipeLen = 0.1;
parameter Real rho = 0.2;
Real h1;
Real h2;
Real p1;
Real p2;
initial equation
h1 = 1;
h2 = 0;
equation
p1 = g * rho * h1;
p2 = g * rho * h2;
der(h1) = (-1) / 128 * Modelica.Constants.pi * pipeDia ^ 4 * pipeLen ^ (-1) * mu ^ (-1) * (p1 + (-1) * p2);
der(h2) = 1 / 128 * Modelica.Constants.pi * pipeDia ^ 4 * pipeLen ^ (-1) * mu ^ (-1) * (p1 + (-1) * p2);
»;
end W8918fcdd72d8462a890fa97776822164;
将Modelica源码复制到SystemModeler运行,得到如下h1, h2的高度变化图形
总结
在没有发现Mathematica和SystemModeler结合使用时,对于初学阶段快速编写Modelica源码是一件棘手的事情,后来查看Mathematica帮助文档发现可以利用CreateSystemModel来完成代码的自动生成,优点就在于你完全可以在Mathematica中建立直观上的数学逻辑,然后通过CreateSystemModel自动生成Modelica代码,放到modeler中进行进一步的分析处理。