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

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    endendtable=[ka' aa' m' ts'];table(1:i-1,:);

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