Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-12-06
年龄: 44
帖子: 2
声望力: 0 ![]() |
![]() ![]() 已知一个被控对象的阶跃曲线的离散数据点,现在如何能得到相应的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); |
![]() |
![]() |