【问题标题】:MATLAB plot for increasing value增加值的 MATLAB 图
【发布时间】:2016-06-09 16:17:57
【问题描述】:

我有以下 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 循环来绘制它。

感谢您的帮助!

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    默认情况下,绘图将始终在活动图形 (gcf) 的活动轴 (gca) 上绘制。如果您发出多个图,默认情况下它们将覆盖前一个图。要抑制这种情况,您应该在调用绘图命令之前调用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
    

    【讨论】:

    • 我如何获得具有不同 k4 值的图呢?我真的无法理解你在说什么。你能用代码解释一下吗?
    • 谢谢,正是我想要的:)
    • 快!我的回答几乎与您的编辑同时出现
    • @am304,确实,很抱歉发生冲突:)
    【解决方案2】:

    如果您希望所有 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多