文章目录
前言
Lookup Table模块
一维查表
二维查表
三维查表
插值查表
动态查表
分析和应用
总结
前言
见《开箱报告,Simulink Toolbox库模块使用指南(三)——Simscape 电路仿真模块》
见《开箱报告,Simulink Toolbox库模块使用指南(四)——S-Fuction模块》
见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Function)》
见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》
见《开箱报告,Simulink Toolbox库模块使用指南(七)——S-Fuction Builder模块》
Lookup Table模块
Lookup Table模块是Simulink中的一类实现查表功能的模块,Mathworks官方Help对该部分内容的说明如下所示。
Lookup Table模块在Simulink Toolbox库中的位置如下图所示。
本文选取其中几个有代表性的模块为例,介绍一下具体的应用方法。
一维查表
从一维数组中按照索引检索输出(类似于Select模块),示例如下:
Tips:索引值从0开始,2对应数组中的第三个元素。
二维查表
从二维数组中按照索引检索输出,示例如下:
Tips:第一个索引是行,第二个索引是列。
三维查表
从三维数组中按照索引检索输出,示例如下:
Tips:cat()函数第一个参数是维度,后面以此类推是每一页的Table数据。
插值查表
上述Direct Lookup Table模块只能在已有数组元素中进行检索,但是实际中经常会用到Table中相邻两个元素之间的值,这时候就要对Table进行插值,示例如下:
这里的查表实际上是将离散的Table数据拟合成一个连续的函数,所以就涉及如下知识点:
Tip1:单调递增:Breakpoints数组必须是自左向递增的值,即使有两个相等的都不行(这是中学数学中的函数确定性定理)。另外安利一个逆序函数fliplr(),可以直接将递减的数组颠倒过来,示例如下。
Tip2:内插算法:最新版的Matlab 2023b提供了五种内插算法,示例如下:
Tip3:外插算法:三种外插算法示例如下,每种算法的实际效果如其字面含义。
Tip4:搜索算法:三种外插算法示例如下,如果每次运算的Breakpoints变化不大,那么选择从前一次的搜索结果附近开始搜索,将会大大提上算法执行的效率。
动态查表
上述几种Lookup Table模块只能在固定不变Table数据中进行检索,但是实际中Table数据肯定会随着时间的推移而发生变化,这时候就要用到动态查表模块了,示例如下:
Tips:x是索引输入,xdat是Breakpoints,ydat是Table。
分析和应用
Lookup Table模块在Simulink模型仿真和自动生成代码方面的应用功能非常强大,主要应用于无法通过代数模型进行建模,严重依赖于实验数据进行建模的物理模型,例如非线性传感器建模、非线性电池电压建模、发动机功率谱建模等。项目中使用Lookup Table模块后,能够大大提高数表使用的便利性,尤其是三维及三维以上数表的使用。另外Lookup Table模块还将一些常用的插值算法、搜索算法等固化下来,便于开发人员的移植和复用,这样能使很多项目开发的工作量大大减少,同时也意味着软件开发全流程的人力和时间投入大幅缩减。主要适用于有自动代码生成工具链支撑和模块化软件开发的团队或项目,可以合理协调团队成员的分工合作,提高代码可控性,增加代码的复用率,减少代码移植障碍。
总结
以上就是本人在使用Lookup Table时,一些个人理解和分析的总结,首先介绍了Lookup Table的基本知识,然后展示它的使用方法,最后分析了该模块的特点和适用场景。
后续还会分享另外几个最近总结的Simulink Toolbox库模块,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。
另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。
版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!