在Matlab中使用for循环

时间:2015-02-19 05:40:04

标签: matlab for-loop plot matlab-figure

我有以下代码:

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)

有没有办法编写一个循环,用于绘制tmatlab和ymatlab的值M_p = 0.1:0.1:0.3,以便为每个M_p值绘制tmatlab和ymatlab?

2 个答案:

答案 0 :(得分:0)

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})

答案 1 :(得分:0)

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

之后,只需生成一个新的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{:});