dn62038607 发表于 2009-6-1 13:50

一阶纯滞后系统的阶跃信号曲线

控制系统中,一阶纯滞后系统的阶跃信号曲线可以模拟为S型。我这里有一组TXT数据,同时需要做简单的数据处理。附件里面是数据,这里附程序和出现的错误。

tet=load('tet.txt');
t=tet(:,1);
yor=tet(:,2);
dy2=diff(diff(yor));         %b的二阶差分
m=min(abs(dy2));
n=find(abs(dy2)==m);         %找到二阶差分绝对值最小的,就是最接近0的点
x=t(n);      %?拐点横坐标
y=yor(n);      %?拐点纵坐标
disp(['(',num2str(x),' , ',num2str(y),')']);
j=max(yor);            %?极限
dy1=diff(yor);      %一阶导
k=subs(dy1, 't', n);   %拐点处的一阶导值,对应的拐点处切线斜率
b=y-k*x;%拐点处切线的截距
x1=-k/b;         %用简单的数学模型的做法算出切线与X轴的交点横坐标,即纯滞后时间
x2=(j-b)/k;       %切线与输出稳态点的横坐标。
x3=x2-x1;       %?时间常数
num=;      
den=;
sys=tf(num,den,'inputdelay',x1)   %带入系数并显示传递函数   
运行后的错误
(9.9 , 1.9003)
??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the
same number of rows.
响应曲线本就是一组数据,这样的数据组成的曲线的拐点已经找到(9.9 , 1.9003),但是后面一段没结果了。
我现在是感觉在提取TXT数据的时候是不是有什么问题,是否是需要转值再进行处理

[ 本帖最后由 ChaChing 于 2009-6-1 21:57 编辑 ]

ChaChing 发表于 2009-6-1 22:11

从这一行出错! k=subs(dy1, 't', n);
k应该是一个值, 但不是! 为一200*1

还有matlab好处在其直译式编辑, 建议初学者一行一行试! 不要全部写完再试!
并检查每句结果是否为LZ要的! 至少个人还是经常如此!

dn62038607 发表于 2009-6-4 15:40

谢谢ChaChing;
这个程序的问题k=subs(dy1, 't', n);   应该改为k=dy1(n);
之前不知道有个直译式编辑,毕竟才学使用MATLAB,现在已经比较清楚了。
再此在一次谢谢ChaChing。
还有就是这样生成系统传递函数需要注意的是,inputdelay,就是滞后时间,要求为正,这个程序总的来说还有这样一个问题,在实际使用是需要做一些修改。

ChaChing 发表于 2009-6-4 16:50

回复 板凳 dn62038607 的帖子

建议与大家分享你的成果, 给齐程序, 做个结束!

cqdx1982 发表于 2010-9-15 18:28

{:{40}:}{:{33}:}{:{33}:}{:{33}:}
页: [1]
查看完整版本: 一阶纯滞后系统的阶跃信号曲线