这是个求超调量和调节时间的比较简单的程序,但是结果和别人运行出来的结果不一样,有点纠结。不过我觉得我的方法应该是正确的,贴一下代码吧!
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,:);
在这个里面用到了矩阵的表示,其实已经忘记了很多了,今天当做是又复习了一下吧!