前两天聊换热器的时候,遇到一个问题,就是如果有些参数供应商给不了但是有实验数据,可不可以用实验数据把这些参数给标定出来?
这个是可以的,也就是之前所说的参数标定(参数估算)。也正好官方给了这么一个换热器的例子,就看了看。
简单说就是三部:设定优化目标,选定优化参数,开始优化。
Simscape 库里的换热器模块:关于换热器模型的数学机理,参见:热管理系统建模 01 基础一维水冷换热模型 - 知乎 (zhihu.com)热管理系统建模 02 基础 Pipe 模型 - 知乎 (zhihu.com)热管理系统建模 03 换热器模型 - 知乎 (zhihu.com)以便能更好的理解我们要标定的模型及其参数。热管理系统建模基础 05 - 冷凝器/蒸发器 - 知乎 (zhihu.com)
参数标定就是借助优化工具箱来调整模型参数,在相同的输入下让模型仿真结果能匹配实验结果。因为很多时候,参数是直接测不到的或者很难测到。
这是个内置案例,通过以下命令打开该案例所在帮助文档位置:
空气侧和水侧给定不同的入口条件,分别测得各个工况下两侧的压降和出口温度。
实测数据:案例里提供了实验数据:sscfluids_heat_exchanger_estimation_data.mat
刚刚的数据文件用timeseries类型保存的,一共八组数据,分别对应刚刚的输入输出,从命名能看出来。
这里就不解释 timeseries 了,因为之后会被 timetable 取代。timetable的构造还是挺简单的:
刚刚画图所用的代码:
有了实验数据之后,我们搭建出这个虚拟试验台架模型,用来做模型参数标定。
模型的参数标定就是,给标定模型同样的输入激励,让优化工具箱去自动调整**的标定参数,让仿真输出信号和实测信号一致。
输入信号通过各自的 Flow Rate Source 来定义输入边界条件;有意思的是这里的流体端使用的是Volumetric Flow Rate Source,而空气端使用的 Mass Flow Rate Source。
输出信号
在同样的输入条件下,对比两侧的输出温度以及压降。一个评估换热,一个评估流阻。使用对应的 Sensor 模块来测量目标信息;Scope 对比查看这四组目标信号;
8 个实测数据,用了 From Workspace 来将 base workspace 里的 timeseries 信号读入到 Simulink 模型。
看下初始参数的仿真结果和实验数据的对比。
对于换热器来说,影响它特性的主要因素是流阻系数以及换热面积。就这个换热器模块,选择红色的参数作为我们要使用实验数据来标定的参数。然后使用优化工具向来完成这个参数标定的过程。
这里没有使用 Parameter Estimation,使用的是 Response Optimizer(演示)。如果在*上方的常用栏看不到,打开下拉菜单往下找。
我们的优化目标是换热器的两侧的压差以及两侧的输出温度,让仿真结果和实验数据匹配。
所以这里选择的优化目标类型是 signal tracking。
我们有四个输出信号都要匹配,所以这四个 signal tracking 的优化目标都要设置。下面这个步骤和刚刚一样,可以跳过去。
界面上的【Plot Model Response】可以查看当前 base workspace 里初始参数的仿真结果。
选择我们刚刚提到的四个参数作为优化参数,也就是让优化工具帮我们去调整的参数。
对于优化工具来说,我们的换热器只是一个数学方程,所有的参数调整都只是为了之前所设置的优化目标。在它的眼里,参数没有任何物理意义。所以我们需要手动给物理参数制定一些合理的边界,以及合理的初始值,这也是为了能让这个过程能更快收敛。
可以配置一些比如优化算法,是否使用并行运算等等。
这个部分对 Simscape 来说尤为重要。首先,不管是什么模型,请先设置为 Fast Restart,可以极大的加快整个优化过程;对于 Simscape 模型,检查要标定的参数设置为 Run-time(默认都是Conpiler-time);
前面都设置好了,就可以直接点击开始按钮了。
不过可以选择把参数调整过程显示出来。这个优化过程我没有加速也没有剪辑。
一顿操作完成后,我们可以导出m文件,类似于 PPT里的宏录制,把我们刚刚的操作都具象化为了脚本。
导出成脚本自定义之后,可以在它的基础上进行修改,除了以后能自动化整个工作流之外,自由度也更大了一些。
生成的脚本和案例里给的代码段差不多,只是案例脚本里用了不同的优化方法,如下图红线:
这是它的结果,好多了:
就这样。
部分内容来源于网络,仅用于学习分享,如发现有侵权,请及时联系删除,谢谢。