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