我有以下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循环来绘制它。
感谢您的帮助!
答案 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