我是MATLAB的新手,我一直在寻找我想做的事情,但结果并不合适。
我绘制了传递函数变化的图表,我所做的代码如下:
omega = 3;
K = omega * omega;
for zeta = 0.1:0.1:2
sys = tf(K,[1 2*zeta*omega omega]);
figure();
subplot(1,2,1);
step(sys);
title('Step response');
[num,den] = tfdata(sys, 'v');
disp(den);
r = roots(den);
subplot(1,2,2);
%hold (subplot(1,2,2), 'on');
plot(real(r), imag(r), 'o');
title('Pole Locations in Complex Plane');
end
每次循环运行时,它都会创建一个新的数字。第一个子图对于每个图都应该是唯一的,但是第二个子图应该从它之前的图中绘制所有点(所有传递函数的分母的根)的累积。我尝试使用hold (subplot(1,2,2), 'on');
来保留第二个子图,但它没有用。我的想法是因为子图是不同的数字,所以hold on
不能使用。
我该如何解决这个问题?任何帮助都会很棒。
答案 0 :(得分:3)
解决方案是在子图中使用“标记”。我正在使用您的代码进行编辑:
omega = 3;
K = omega * omega;
for zeta = 0.1:0.1:2
sys = tf(K,[1 2*zeta*omega omega]);
figure();
sb = subplot(1,2,1);
set(sb, 'Tag', 'daddy') % Something to tag with - memorable
step(sys);
title('Step response');
[num,den] = tfdata(sys, 'v');
disp(den);
r = roots(den);
sb = subplot(1,2,2);
set(sb, 'Tag', 'child')
sb = findobj('Tag','child'); % Use MATLAB methods to find your tagged obj
set(sb,'NextPlot','add'); % set 'NextPlot' property to 'add'
plot(real(r), imag(r), 'o');
title('Pole Locations in Complex Plane');
end
这对你有用吗?顺便说一句。这也在MATLAB central。你也应该使用它。