在 Matlab 中使用 for 循环

Using for loop in Matlab

我有以下代码:

t_p = 0.5
M_p=0.1;    
w = pi/t_p;
o_m = (-w*log(M_p))/pi;
k1 = 5*(o_m^2+w^2);
k2 = 10*o_m-1;
A = [0 1; 0 -1/5];
B = [0; 1/5];
C = [1 0];
K = [k1 k2];
kref = -inv(C*inv(A-B*K)*B);
Acl = A-B*K;
Bcl = B*kref;
Ccl = [1 0];
s=eig(Acl);
[ymatlab,tmatlab] = step(ss(Acl,Bcl,Ccl,0));
subplot(1,2,1)
plot(tmatlab(M_p),ymatlab(M_p),'bo-','linewidth',1)

有没有什么方法可以编写一个循环,为值 M_p = 0.1:0.1:0.3 绘制 tmatlab 和 ymatlab,以便它为每个 M_p 值绘制 tmatlab 和 ymatlab?

i=0;
for M_p=0.1:0.1:0.3;
    i=i+1;
    w = pi/M_p;
    o_m = (-w*log(M_p))/pi;
    k1 = 5*(o_m^2+w^2);
    k2 = 10*o_m-1;
    A = [0 1; 0 -1/5];
    B = [0; 1/5];
    C = [1 0];
    K = [k1 k2];
    kref = -inv(C*inv(A-B*K)*B);
    Acl = A-B*K;
    Bcl = B*kref;
    Ccl = [1 0];
    s=eig(Acl);
    [ymatlab,tmatlab] = step(ss(Acl,Bcl,Ccl,0));
    val{i} = char(strcat('M_p = ',num2str(M_p)));
    plot(tmatlab,ymatlab,'-','linewidth',1,'Color',[0,i*0.3,1-i*0.3])
    hold on
end
legend(val{1},val{2},val{3})

添加到已接受的答案中,如果您不希望每个图都有单独的图形,则可以在同一个图形上绘制不同颜色和不同标记样式的所有图形。只需定义一个字符串,该字符串定义您想要的所有可能的颜色以及您想要的所有可能的标记样式。

之后,只需生成一个新的 figure,使用 hold on 并使用循环通过访问之前定义的每个字符串来绘制具有不同颜色和不同标记的每条线。在下面的例子中,我定义了一个三字符的字符串rgb,表示第一个地块是红色的,第二个地块是绿色的,第三个地块是蓝色的。每个对应的标记是o.x。因此:

t_p = 0.5;
figure; hold on;
colors = 'rgb';
markers = 'o.x';
val = cell(1,3);
idx = 1;
for M_p=0.1:0.1:0.3;    
    w = pi/t_p;
    o_m = (-w*log(M_p))/pi;
    k1 = 5*(o_m^2+w^2);
    k2 = 10*o_m-1;
    A = [0 1; 0 -1/5];
    B = [0; 1/5];
    C = [1 0];
    K = [k1 k2];
    kref = -inv(C*inv(A-B*K)*B);
    Acl = A-B*K;
    Bcl = B*kref;
    Ccl = [1 0];
    s=eig(Acl);
    [ymatlab,tmatlab] = step(ss(Acl,Bcl,Ccl,0));
    %// Change
    plot(tmatlab(M_p),ymatlab(M_p),[colors(idx) markers(idx)],'linewidth',1);
    val{idx} = char(strcat('M_p = ',num2str(M_p)));
    idx = idx + 1;
end

legend(val{:});