在以下最小工作示例中,
M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);
step(G)
显示系统的输出响应
系统的特性缺少时间常数,在这种情况下Tc = M / 6(秒)。是否可以选择激活这一重要特征?时间常数是阶跃响应达到其最终值的63%的时间。在此示例中,通过稳态选项绘图,最终输出为0.167。为了计算时间常数,基本上我们计算输出幅度的时间为0.167 * 0.63 = 0.10521。从情节来看,我们可以看到
匹配Tc = M / 6,其中M = 2。这是一个繁琐的解决方法。希望有关此问题的选项。
答案 0 :(得分:1)
您真的不需要绘制step
函数的输出来查找Tc
:
M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);
tvect = 0:0.0001:3; % provide any time limits you want;
% the smaller time increment the higher "accuracy"
[val, t] = step(G, tvect);
idx_Tc = find(val>=0.63*max(val), 1, 'first');
Tc = t(idx_Tc); % Tc which you are looking for
val_Tc = val(idx_Tc); % value at Tc
如果你需要一个漂亮的情节,你可以在之后轻松创建它,因为你已经拥有了所有必需的值(t
,val
,Tc
,val_Tc
)。
修改强>
您可以按照以下示例扩展上下文菜单:
M=2;
num=1/M;
den=[1 6/M];
G=tf(num,den);
step(G);
f = gcf;
c = f.CurrentAxes.UIContextMenu;
uimenu(c,'Label','Find Tc','Callback',@findTc);
f.CurrentAxes.UIContextMenu = c;
其中函数findTc
定义为:
function findTc(~,callbackdata)
t = callbackdata.Source.Parent.Parent.CurrentAxes.Children(1).Children(2).XData;
val = callbackdata.Source.Parent.Parent.CurrentAxes.Children(1).Children(2).YData;
idx_Tc = find(val>=0.63*max(val),1, 'first');
Tc = t(idx_Tc);
val_Tc = val(idx_Tc);
disp(['Tc: ' num2str(Tc) ' val_Tc: ' num2str(val_Tc)])
end
不是在命令窗口中打印值,而是可以对图表进行注释,但我会说这是相当美观的变化。上面的代码显示了如何在上下文菜单中将此功能作为选项。