实验五 非线性系统仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五非线性系统仿真

如图所示系统,分别针对以下三种情况加入非线性环节,采用离散相似法进行仿真,适当改变S同时与非线性环节的情况比较。

1)在A处加入饱和非线性环节

2)在A处加入死区非线性环节

3)在B处加入滞环非线性环节

参考程序:

%------filename:satu.m------

function uc=satu(ur,s1)

if(abs(ur)>=s1)

if(ur>0)

uc=s1;

else uc=-s1;

end;

else uc=ur;

end;

%------filename:dead.m------

function uc=dead(ur,s1)

if(abs(ur)>=s1)

if(ur>0)

uc=ur-s1;

else uc=ur+s1;

end;

else uc=0;

end;

end;

%------filename:backlash.m------

function [Uc,Ubb]=backlash(Urb,Ur,Ucb,S1)

if(Ur>Urb)

if((Ur-S1)>=Ucb)

Uc=Ur-S1;

else Uc=Ucb;

end;

else if(Ur

if((Ur+S1)<=Ucb)

Uc=Ur+S1;

else Uc=Ucb;

end;

else Uc=Ucb;

end;

end;

Ubb=Ur;

%------filename:sp4.m------

P=[0.1 1 0.5 1;10 1 1 0;2 1 1 0;0 1 20 0]; WIJ=[1 0 1;2 1 1;3 2 1;4 3 1;1 4 -1];

n=4;

Y0=10;

Yt0=[0 0 0 0];

h=0.01;

T=0;

T0=0;

Tf=100;

Nout=4;

A=P(:,1);B=P(:,2);

C=P(:,3);D=P(:,4);

m=length(WIJ(:,1));

W0=zeros(n,1);W=zeros(n,n);

for k=1:m

if (WIJ(k,2)==0);W0(WIJ(k,1))=WIJ(k,3); else W(WIJ(k,1),WIJ(k,2))=WIJ(k,3);

end;

end;

for i=1:n

if(A(i)==0);

FI(i)=1;

FIM(i)=h*C(i)/B(i);

FIJ(i)=h*h*C(i)/B(i)/2;

FIC(i)=1;FID(i)=0;

if(D(i)~=0);

FID(i)=D(i)/B(i);

else

end;

else

FI(i)=exp(-h*A(i)/B(i));

FIM(i)=(1-FI(i))*C(i)/A(i);

FIJ(i)=h*C(i)/A(i)-FIM(i)*B(i)/A(i);

FIC(i)=1;FID(i)=0;

if(D(i)~=0);

FIM(i)=(1-FI(i))*D(i)/A(i);

FIJ(i)=h*D(i)/A(i)-FIM(i)*B(i)/A(i);

FIC(i)=C(i)/D(i)-A(i)/B(i);

FID(i)=D(i)/B(i);

else

end;

end;

end;

Z=[0 0 0 0];s=[0 0 0 0]

Y=zeros(n,1);X=Y;y=0;Uk=zeros(n,1);Ubb=Uk;

t=T0:h:Tf;N=length(t);

for k=1:N-1

Ub=Uk;

Uk=W*Y+W0*Y0;

for i=1:n

if(Z(i)~=0)

if(Z(i)==1)

Uk(i)=satu(Uk(i),S(i));

end;

if(Z(i)==2)

Uk(i)=dead(Uk(i),S(i));

end;

if(Z(i)==3)

[Uk(i),Ubb(i)]=backlash(Ubb(i),Uk(i),Ub(i),S(i)); end;

end;

end;

Udot=(Uk-Ub)/h;

Uf=2*Uk-Ub;

X=FI'.*X+FIM'.*Uk+FIJ'.*Udot;

Yb=Y;

Y=FIC'.*X+FID'.*Uf;

for i=1:n

if(Z(i)~=0)

if(Z(i)==4)

Y(i)=satu(Y(i),S(i));

end;

if(Z(i)==5)

Y(i)=dead(Y(i),S(i));

if(Z(i)==6)

[Y(i),Ubb(i)]=backlash(Ubb(i),Y(i),Yb(i),S(i)); end;

end;

end;

y=[y,Y(Nout)];

end;

plot(t,y)

参考结果:

1)

Z=[0 1 0 0];S=[0 5 0 0];

sp4

hold on

Z=[4 1 0 0];S=[1 5 0 0];

sp4

hold on

Z=[4 1 0 0];S=[2 5 0 0];

sp4

相关文档
最新文档