如何用matlab&simulink的look up table查表模块实现下例函数?
2013-06-01 20:02
例如输入0~2pi/3时 输出为1
输入为2pi/3~pi时 输出为0
感谢回答
就是说输出时不连续的 这样应该怎么设置输入输出
图中这个表应该怎样实现呢
你好,我试了下貌似应该是像我图里这样设置(Iar)
可是运行之后出现下图这种情况。主要是lookup table模块设置完不是应该可以在模块上显示出波形的吗 我的却是一个问号
回答
首先,你现在设置的参数是存在问题的,因为作为输入参数的插值节点(breakpoints)要求必须严格单调增加,而你所给的
[0 2*pi/3 2*pi/3 pi pi 5*pi/3 5*pi/3 2*pi]
其第2、3,4、5,6、7三组节点相同,不满足要求。
修改的做法是,在跃变的节点处把左边的节点减去eps或右边的加上eps(虽然从原理上看是跃变,但从实现的角度需要做这样的处理,几乎完全不会有影响),例如:
[0 2*pi/3-eps 2*pi/3 pi-eps pi 5*pi/3-eps 5*pi/3 2*pi]
其次,建议使用Lookup Table模块进行一元插值,没必要使用n-D Lookup Table模块。后者增加了不必要的复杂不说,而且在我这里设置和一元查表模块相同的参数却仍然报错,原因暂未查明。
最后,建议把查表的数据保存为变量,然后在模块参数中使用变量,维护起来更方便(尤其对于节点参数需要多次使用的的这种场合)。
=======
补充说明
=======
在写完上面的内容后(在R2008a上测试),我又在R2012b上试了试,有两点补充:
1、Lookup Table模块在R2010b之后的版本被取消了,取代它的是1-D Lookup Table,而其本质上是n-D Lookup Table模块的特殊参数设置。从你的贴图看,用的应该是R2011a或者更新的版本。
2、关于上面的节点数据报错问题:
[0 2*pi/3-eps 2*pi/3 pi-eps pi 5*pi/3-eps 5*pi/3 2*pi]
在R2012b上报出更具体的错误位置(在第7个节点处),经试
(5*pi/3-eps)-5*pi/3
得到结果为0,这是因为eps/(5*pi/3)=4.2407e-17,已超出双精度浮点数的精度范围,也就是说,在5*pi/3上面加eps和没加一样。
解决的办法可以是把eps换成一个更大的数,或者使用类似pi*(1-eps)代替pi-eps的做法:
x=[0 2*pi/3-eps 2*pi/3 pi*(1-eps) pi 5*pi/3*(1-eps) 5*pi/3 2*pi];
我把示例模型作为附件上传,供参考。
Lookup_Table_2012b.mdl大小:33.84K
怎么在matlab simulink中的查表模块(look up table)添加已经做好的表格
2011-08-25 22:09
对于3维以上的表格,是没有办法直接编辑的,方法是这样:
首先在breakpoints中将你每一维的插值点写入,比如是:
[10,20]
[10,20]
[10,20]
这样表格为两页两行两列。总共有八个数据。
table data中的数是这样写的
reshape([4,16,10,0,5,19,18,0],2,2,2)
这里使用到了reshape函数,它是把一个向量重新整合成一个矩阵的形式。
因篇幅问题不能全部显示,请点此查看更多更全内容