用于增加价值的MATLAB图

时间:2015-10-08 12:53:03

标签: matlab plot

我有以下matlab脚本:

    %sniffer
close all

%initial conditions:
X0=0; R0=0;
x0=[X0 R0];
%parameters:
k1=1; k2=1; k3=1; k4=0.2;
par=[k1 k2 k3 k4];
%input:
tu=[  0   , 0
      1   , 0
      1.01, 1
     20   , 1
     20.01, 0
     30   , 0
     30.01, 1
     40   , 1
     40.01, 1.2
     50   , 1.2
     50.01, 1.4
     60   , 1.4
     60.01, 0
     70   , 0];

[t,x] = ode45(@sniffer_ode,[0 70],x0, [],par,tu);

S = interp1(tu(:,1),tu(:,2),t);
x = [x S];

plot(t,x, 'LineWidth',3);
xlabel('time (t)')
legend('X','R','S')

我希望k4以0.2的步长从0.2到2.0,所以k4=0.2:0.2:2并绘制每一步的图。因此,只有k4应该改变,并且应该制作10个图。我想使用for循环,我知道如何制作步骤但我不知道如何使用for循环来绘制它。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

默认情况下,绘图将始终绘制在活动图形(gca)的活动轴(gcf)中。如果您发出多个图,它们将默认覆盖前一个图。要禁止这种情况,您应该在调用绘图命令之前调用hold on

我建议从figure; gca; hold on;开始(这将首先创建一个新的数字窗口,然后为其单个新轴设置hold;即使没有close all,你也有写一个包含你当前情节命令的for k4=...。这将重叠相同轴上的每个新图。

%initial conditions:
X0=0; R0=0;
x0=[X0 R0];
%parameters:
k1=1; k2=1; k3=1; % k4=0.2:0.2:2

figure;
gca;
hold on;

for k4=0.2:0.2:2
  par=[k1 k2 k3 k4];
  %input:
  tu=[  0   , 0
        1   , 0
        1.01, 1
       20   , 1
       20.01, 0
       30   , 0
       30.01, 1
       40   , 1
       40.01, 1.2
       50   , 1.2
       50.01, 1.4
       60   , 1.4
       60.01, 0
       70   , 0];

  [t,x] = ode45(@sniffer_ode,[0 70],x0, [],par,tu);

  S = interp1(tu(:,1),tu(:,2),t);
  x = [x S];

  plot(t,x, 'LineWidth',3);
  xlabel('time (t)')
  legend('X','R','S')
end %end loop over k4

答案 1 :(得分:1)

如果你想在同一个数字上看到所有10个情节,你可能会看到类似的东西:

%sniffer
close all

%initial conditions:
X0=0; R0=0;
x0=[X0 R0];

%input:
tu=[  0   , 0
      1   , 0
      1.01, 1
     20   , 1
     20.01, 0
     30   , 0
     30.01, 1
     40   , 1
     40.01, 1.2
     50   , 1.2
     50.01, 1.4
     60   , 1.4
     60.01, 0
     70   , 0];

%parameters:
k1=1; k2=1; k3=1; k4=0.2:0.2:2;

figure

for k=1:length(k4)
    par=[k1 k2 k3 k4(k)];

    [t,x] = ode45(@sniffer_ode,[0 70],x0, [],par,tu);

    S = interp1(tu(:,1),tu(:,2),t);
    x = [x S];

    plot(t,x, 'LineWidth',3);
    xlabel('time (t)')
    %legend('X','R','S')
    hold on

end