概述
下面是薛定宇老师那本书上提供的得到一节阶跃响应近似模型的函数,由于没有看见怎么插入附件,只好把程序给贴上来了哈
function [K,L,T,G1]=getfolpd(key,G)
K=dcgain(G);
switch key
case 1
[y,t]=step(G);
fun = inline('x(1)*(1-exp(-(t-x(2))/x(3))).*(t>x(2))','x','t');
x=lsqcurvefit(fun,[1 1 1],t,y); K=x(1); L=x(2); T=x(3);
case 2
[Kc,Pm,wc,wcp]=margin(G); ikey=0;
L=1.6*pi/(3*wc); T=0.5*Kc*K*L;
if isfinite(Kc), x0=[L;T];
while ikey==0,
u=wc*x0(1); v=wc*x0(2);
FF=[K*Kc*(cos(u)-v*sin(u))+1+v^2; sin(u)+v*cos(u)];
J=[-K*Kc*wc*sin(u)-K*Kc*wc*v*cos(u),-K*Kc*wc*sin(u)+2*wc*v;
wc*cos(u)-wc*v*sin(u), wc*cos(u)];
x1=x0-inv(J)*FF;
if norm(x1-x0)<1e-8,
ikey=1; else, x0=x1;
end, end
L=x0(1); T=x0(2);
end
case 3
[n1,d1]=tfderv(G.num{1},G.den{1});
[n2,d2]=tfderv(n1,d1);
K1=dcgain(n1,d1); K2=dcgain(n2,d2);
Tar=-K1/K; T=sqrt(K2/K-Tar^2); L=Tar-T;
case 4
Gr=opt_app(G,0,1,1); L=Gr.ioDelay;
T=Gr.den{1}(1)/Gr.den{1}(2); K=Gr.num{1}(end)/Gr.den{1}(2);
end
G1=tf(K,[T 1],'iodelay',L);
%tfderv is internal to getfod
function [e,f]=tfderv(b,a)
f=conv(a,a); na=length(a); nb=length(b);
e1=conv((nb-1:-1:1).*b(1:end-1),a);
e2=conv((na-1:-1:1).* a(1:end-1),b);
maxL=max(length(e1),length(e2));
e=[zeros(1,maxL-length(e1)) e1]-[zeros(1,maxL-length(e2)) e2];
你试试看,不是所有的模型都可得到一节近似模型的
最后
以上就是害怕向日葵为你收集整理的二阶系统pid matlab仿真,simulink如何整定二阶模型的pid参数的全部内容,希望文章能够帮你解决二阶系统pid matlab仿真,simulink如何整定二阶模型的pid参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复