matlab 控制(helpqq)

这是个求超调量和调节时间的比较简单的程序,但是结果和别人运行出来的结果不一样,有点纠结。不过我觉得我的方法应该是正确的,贴一下代码吧!

i=1;
ts=zeros(1,100);
m=zeros(1,100);
ka=zeros(1,100);
aa=zeros(1,100);
for k=0.5:0.5:10
    for a=0.05:0.05:2
        num=[k,2*a*k,a^2*k];
        den=[1,k,2*a*k,a^2*k];
        G=tf(num,den);
        [y,t]=step(G);                                      %得到系统的单位阶跃响应
        C=dcgain(G);                                        %得到系统终值
            
        max_y=max(y);                                 
        max_overshoot=100*(max_y-C)/C;                      %超调量计算
        s=length(t);                                        %调整时间计算
        while y(s)>0.98*C&&y(s)<1.02*C                      %达到误差要求的允许值
            s=s-1;
        end
        settling_time=t(s);                                 %得到系统的调节时间
            
        if settling_time<3 && max_overshoot <8
            ka(i)=k;
            aa(i)=a;
            ts(i)=settling_time;
            m(i) =max_overshoot;
            i=i+1;
        end
    end
end
table=[ka' aa' m' ts'];
table(1:i-1,:);
       

在这个里面用到了矩阵的表示,其实已经忘记了很多了,今天当做是又复习了一下吧!

你可能感兴趣的:(matlab,程序)