longyingdong
2009-03-26, 09:07
:confused: 请教一个问题:
已知一个被控对象的阶跃曲线的离散数据点,现在如何能得到相应的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);
已知一个被控对象的阶跃曲线的离散数据点,现在如何能得到相应的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);