for-loop在Matlab中的应用

for-loop在Matlab中的应用,matlab,for-loop,plot,matlab-figure,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,t

我有以下代码:

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})
之后,只需生成一个新图形,使用按住键,并通过访问前面定义的每个字符串,使用循环以不同的颜色和不同的标记绘制每条线。在下面的示例中,我定义了一个三个字符的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{:});

你得到答案了吗?有没有办法让同一轴线上的每个绘图使用不同的标记和颜色样式?@user3120056-是的。看看我的答案。