研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块

03-06 9031阅读 0评论

文章目录

前言

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对该部分内容的说明如下所示。

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第1张

        Lookup Table模块在Simulink Toolbox库中的位置如下图所示。

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第2张

        本文选取其中几个有代表性的模块为例,介绍一下具体的应用方法。

一维查表

        从一维数组中按照索引检索输出(类似于Select模块),示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第3张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第4张

Tips:索引值从0开始,2对应数组中的第三个元素。

二维查表

        从二维数组中按照索引检索输出,示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第5张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第6张

        Tips:第一个索引是行,第二个索引是列。

三维查表

        从三维数组中按照索引检索输出,示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第7张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第8张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第9张

        Tips:cat()函数第一个参数是维度,后面以此类推是每一页的Table数据

插值查表

        上述Direct Lookup Table模块只能在已有数组元素中进行检索,但是实际中经常会用到Table中相邻两个元素之间的值,这时候就要对Table进行插值,示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第10张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第11张

        这里的查表实际上是将离散的Table数据拟合成一个连续的函数,所以就涉及如下知识点:

        Tip1:单调递增:Breakpoints数组必须是自左向递增的值,即使有两个相等的都不行(这是中学数学中的函数确定性定理)。另外安利一个逆序函数fliplr(),可以直接将递减的数组颠倒过来,示例如下。

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第12张

        Tip2:内插算法:最新版的Matlab 2023b提供了五种内插算法,示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第13张

        Tip3:外插算法:三种外插算法示例如下,每种算法的实际效果如其字面含义。

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第14张

        Tip4:搜索算法:三种外插算法示例如下,如果每次运算的Breakpoints变化不大,那么选择从前一次的搜索结果附近开始搜索,将会大大提上算法执行的效率。

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第15张

动态查表

        上述几种Lookup Table模块只能在固定不变Table数据中进行检索,但是实际中Table数据肯定会随着时间的推移而发生变化,这时候就要用到动态查表模块了,示例如下:

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第16张

研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块 第17张

        Tips:x是索引输入,xdat是Breakpoints,ydat是Table。

分析和应用

        Lookup Table模块在Simulink模型仿真和自动生成代码方面的应用功能非常强大,主要应用于无法通过代数模型进行建模,严重依赖于实验数据进行建模的物理模型,例如非线性传感器建模、非线性电池电压建模、发动机功率谱建模等。项目中使用Lookup Table模块后,能够大大提高数表使用的便利性,尤其是三维及三维以上数表的使用。另外Lookup Table模块还将一些常用的插值算法、搜索算法等固化下来,便于开发人员的移植和复用,这样能使很多项目开发的工作量大大减少,同时也意味着软件开发全流程的人力和时间投入大幅缩减。主要适用于有自动代码生成工具链支撑和模块化软件开发的团队或项目,可以合理协调团队成员的分工合作,提高代码可控性,增加代码的复用率,减少代码移植障碍。

总结

        以上就是本人在使用Lookup Table时,一些个人理解和分析的总结,首先介绍了Lookup Table的基本知识,然后展示它的使用方法,最后分析了该模块的特点和适用场景。

        后续还会分享另外几个最近总结的Simulink Toolbox库模块,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。


        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!


免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,9031人围观)

还没有评论,来说两句吧...

目录[+]