MATLAB — удержание для подзаголовка между разными фигурами (решено, но могут возникнуть проблемы в версии R2012a)

Я новичок в 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 нельзя использовать.

Как я могу решить эту проблему? Любая помощь будет отличной.


person user3763711    schedule 13.11.2014    source источник
comment
Итак, вы хотите, чтобы ваш второй участок также имел первый участок под новым сюжетом? Я имею в виду перекрытие?   -  person ha9u63ar    schedule 14.11.2014


Ответы (1)


Решение состоит в том, чтобы использовать «тег» в вашем подзаговоре. Я использую ваш код для редактирования:

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. Вы должны использовать это тоже.

person ha9u63ar    schedule 13.11.2014
comment
@ am304 Спасибо за +1: с. Я получил это от MATLAB, но просто попытался объяснить. Это действительно изворотливо, как вы можете это сделать!! - person ha9u63ar; 14.11.2014
comment
У меня это не сработало, вероятно, потому, что я использую версию MATLAB 2012 года на своем ноутбуке. Хотя это очень полезно! Я собираюсь изучить эти функции и вскоре опробовать код на своем школьном компьютере. - person user3763711; 14.11.2014
comment
@ user3763711 Спасибо за это обновление! Не могли бы вы обновить заголовок вопроса, указав номер версии, чтобы мы знали, что эта версия может быть проблемой. - person ha9u63ar; 14.11.2014