Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2009-03-26, 09:07   #1
longyingdong
初级会员
 
注册日期: 2008-12-06
年龄: 44
帖子: 2
声望力: 0
longyingdong 正向着好的方向发展
默认 [求助]关于求高阶系统的传递函数

请教一个问题:
已知一个被控对象的阶跃曲线的离散数据点,现在如何能得到相应的4 阶的传递函数啊?

多项式拟合polyfit()以及lsqcurvefit()拟合都使用过了
polyfit()拟合出来的分母总是[1 0 0 0 0]的形式,而且结果不能 使用step()阶跃函数;
而lsqcurvefit()拟合出来的数据和原始数据不是很匹配(对于4阶 来说)


以下是我的相关代码:哪位做过的高手指点一下啊:
f=inline( 'a(1)*exp( a(3)*t )+a(2)*exp( a(4)*t )+a(5)*exp( -sqrt(3)*a(6)*t/2 ).*cos(a(6)*t/2)+(2*a(7)-sqrt(3)*a(5)*a(6))*exp( -sqrt(3)*a(6)*t/2 ).*sin(a(6)*t/2)./a(6)','a','t')
[xx,res]=lsqcurvefit(f,[1,1,1,1,1,1,1],x1,y3)
x=x1 ;
y=(a(1)*x.^4+a(2)*x.^3+a(3)*x.^2+a(4)*x+a(5))./(x.^5+a(6)*x.^4+a(7)*x.^3+a(8)*x.^2+a(9)*x+a(10)) ;
hold on ;
plot(x,y,'.');
-------------------------------------------
p5=polyfit(x1,y3,jieshu);
vpa(poly2sym(p5),10)
y5=polyval(p5,x1);
for i=1:jieshu+1
z(i)=p5(i)*factorial(jieshu-i+1) ;
end
for i=1:jieshu+1
if z(i) ~= 0
flag_nzero=i ;
break
end
end

geshu = jieshu+2-i ;
ff(1:geshu) = z(i:jieshu+1) ;
den(1)=1;
den(2:geshu)=0 ;
num(1:geshu)=ff(1:geshu);
longyingdong 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 12:38


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.