到底是要用MATLAB还是Simulink?二者的实现方法是不一样的。
就我所知灶档的范围内,Simulink是没有现成模块的。
如何反查,和你的具体数据有关:
1、如果对于给定的BP1,取BP2的所有值,对table插值得到的结果(比如说,我们记作z)是单调变化的,可以用z作为节点,而把BP2看作函数值,隐闹乱进行一维插值;
2、如果不满足上述单调性条件,那么也就意味着z是BP2的多值函数,无法用一维插值弯迹的方法来解决。此时可以用fsolve求解,但是请注意,得到的结果和初值有关。
第1种情况比较简单,下面的例子用以说明第2种情况:
[x,y,z]=peaksxi=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、最后,把查表的数据保存为变量,然后在模块参数中使用变量,维护起来更方便(尤其对于节点参数需要多次使用的的这种场合)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)