matlab如何实现反查表

matlab如何实现反查表,第1张

到底是要用MATLAB还是Simulink?二者的实现方法是不一样的。

就我所知灶档的范围内,Simulink是没有现成模块的。

如何反查,和你的具体数据有关:

1、如果对于给定的BP1,取BP2的所有值,对table插值得到的结果(比如说,我们记作z)是单调变化的,可以用z作为节点,而把BP2看作函数值,隐闹乱进行一维插值;

2、如果不满足上述单调性条件,那么也就意味着z是BP2的多值函数,无法用一维插值弯迹的方法来解决。此时可以用fsolve求解,但是请注意,得到的结果和初值有关。

第1种情况比较简单,下面的例子用以说明第2种情况:

[x,y,z]=peaks

xi=0.5zi=5  % 相当于你说的已知BP1和table

clf

a = 0.3

mesh(x,y,z,'FaceAlpha',a,'EdgeAlpha',a)

xlabel('x')

ylabel('y')

zlabel('z')

hold on

yi=fsolve(@(yi)interp2(x,y,z,xi,yi)-zi,0)

plot3(xi,yi,zi,'bo','markerfacecolor','b')

yi=fsolve(@(yi)interp2(x,y,z,xi,yi)-zi,2.9)

plot3(xi,yi,zi,'ro','markerfacecolor','r')

yi=fsolve(@(yi)interp2(x,y,z,xi,yi)-zi,1.5)

plot3(xi,yi,zi,'mo','markerfacecolor','m')

view(60,20)

代码中,取了3个不同的初值,得到的结果各不相同(有两个是正确的,一个未收敛,如图所示)。

如何用matlab&simulink的look up table查表模块实现下表的查寻

1、在跃变的节点处把左边答运答的节点减去eps或右边的加上eps(虽然从原理上看是跃悄铅变,但从实现的角度需要做这样的处理,几乎完全不会有影响),例如:

[0 2*pi/3-eps 2*pi/3 pi-eps pi 5*pi/3-eps 5*pi/3 2*pi]

2、其次,使用Lookup Table模块进行一元插值,没必要使用n-D Lookup Table模块。后者增加了不必要的复杂不说,清慧而且在设置和一元查表模块相同的参数却仍然报错,原因暂未查明。

3、最后,把查表的数据保存为变量,然后在模块参数中使用变量,维护起来更方便(尤其对于节点参数需要多次使用的的这种场合)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12452578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存