matlab已知系统的传递函数为 ,求其阶跃响应

传递函数为1/(s^2+2as+1),并分析a变化时,其阶跃响应的变化情况。

第1个回答  2010-07-09
也不晓得我写的是不是你所需要的答案!
只需要给定a的范围!
调用myfun函数即可得到阶跃响应的其中三个指标
如果是你需要的答案,请采纳!
谢!
还有问题请留言!

function [cmax,tp,ts]=myfun(a)
%概略计算某参数变化时阶跃响应的峰值、峰值时间、调节时间
%定义数组a,如a=1:0.1:5;
n=length(a);
for i=1:n
%建立传递函数
num=[1];den=[1 2*a(i) 1];
sys0=tf(num,den);
[y0,t0]=step(sys0);
%计算峰值cmax、峰值时间tp
cmax(i)=max(y0);
tp(i)=spline(y0,t0,cmax(i));
%计算调节时间ts,5%,如果需要计算2%只需将0.05换成0.02即可
for k=1:length(y0)
if abs(y0(k:length(y0))-1)<0.05
ts(i)=spline(y0,t0,y0(k));
end
end
end本回答被提问者采纳
第2个回答  2020-01-20
对于正常的系统传函,求阶跃响应很简单,一般可以用类似下面的代码:
s=tf('s');
gc=2*(0.2*s+1)*(0.1*s+1)/(0.2*s);
step(gc)但上述代码会出错:
??? error using ==> lti.step at 86
cannot simulate the time response of lti models with more zeros than poles.这是因为,传递函数分子阶次高于分母阶次,从物理概念上说违反了因果律,而从数字仿真的角度来说,也是算法不允许的。

可以变通一下,借助于符号运算来求:
syms s
gc=2*(0.2*s+1)*(0.1*s+1)/(0.2*s);
g=ilaplace(gc/s)
ezplot(g,[0 10])得到阶跃响应图形如下(由于传函包含积分环节,其阶跃响应必然是随时间一直增长的,没有稳态值):
应该指出,在上述阶跃响应的表达式中,包括了一个脉冲函数项(dirac),而脉冲函数绘图时是体现不出来的。
相似回答