一、实验目的   1. 了解离散相似法的基本原理   2. 掌握离散相似法仿真的基本过程   3. 应用离散相似法仿真非线性系统   4. MATLAB实现离散相似法的非线性系统仿真   5. 掌握SIMULINK仿真方法,应用于非线性系统的仿真,并对实验结果进行分析比较 二、实验原理   在ASR的输出增加限幅装置(饱和非线性,饱和界为c=8 )。 Ce=0.031,其它参数不变。输入为单位阶跃,用离散相似法求系统各环节的输出。   要求:采用零阶保持器和一阶保持器离散化系统,分别完成本实验。   1、各环节的参数:   由5个典型环节组成:   A=[0 0 1 1 0];   B=[tn ti Ts Tl Tm*Ce];   C=[Kn Ki Ks 1/R R];   D=[Kn*tn Ki*ti 0 0 0];   还有一饱和非线性环节:c=8;   2、各环节的离散化系数矩阵 3、各环节的输入作用        (1)、u(n)可通过联接矩阵直接求得:              u(n)=[u1(n), u2(n),…,un(n)]为各环节的输入量, n为环节数。 Y(n)=[Y1(n), Y2(n),…,Yn(n)]为各环节的输出量, r为外中参考输入量。     (2)、U(n)由近似表达式求得:            (3)、u(n+1)用折线法近似求得:          4、状态和输出计算     (1)、一阶保持器       X=FI'.*X+FIM'.*Uk+FIJ'.*Udot;       Y=FIC'.*X+FID'.*Uf;     (2)、零阶保持器       X=FI'.*X+FIM'.*Uk;       Y=FIC'.*X+FID'.*Uf;   5、饱和非线性环节   看作环节1(ASR)的一部分。建立satur.m文件: 1 2 3 4 5 6 7 8 9 function [uo]=satur(ui,c) if (abs(ui)<=c) uo=ui; elseif ( ui > c ) uo = c; else uo=-c; end end  三、实验过程   1、新建脚本文件,命名为satur.m 复制代码 function [uo]=satur(ui,c) if (abs(ui)<=c) uo=ui; elseif ( ui > c ) uo = c; else uo=-c; end end 复制代码   2、新建脚本文件,命名为test3.m   完整代码: 复制代码 clc; clear; % ****** 各环节参数 ****** % Kn=26.7; tn=0.03; Ki=0.269; ti=0.067; Ks=76; Ts=0.00167; R=6.58; T1=0.018; Tm=0.25; Ce=0.031; Alpha=0.00337; Beta=0.4; A=[0 0 1 1 0]; B=[tn ti Ts T1 Tm*Ce]; C=[Kn Ki Ks 1/R R]; D=[Kn*tn Ki*ti 0 0 0]; c=8; r=1; W=[0 0 0 0 -Alpha; 1 0 0 -Beta 0; 0 1 0 0 0; 0 0 1 0 -Ce; 0 0 0 1 0]; W0=[1 0 0 0 0]'; h=0.001; t_end=0.5; t=0:h:t_end; n=length(t); % ****** 各环节离散化系数 ****** % block_num=5; for k=1:block_num if(A(k)==0) FI(k)=1; FIM(k)=h*C(k)/B(k); FIJ(k)=h*h*C(k)/B(k)/2; FIC(k)=1; FID(k)=0; if(D(k)~=0) FID(k)=D(k)/B(k); end else FI(k)=exp(-h*A(k)/B(k)); FIM(k)=(1-FI(k))*C(k)/A(k); FIJ(k)=h*C(k)/A(k)-FIM(k)*B(k)/A(k); FIC(k)=1; FID(k)=0; if(D(k)~=0) FIC(k)=C(k)/D(k)-A(k)/B(k); FID(k)=D(k)/B(k); end end end Y0=[0 0 0 0 0]'; Y=Y0; X=zeros(block_num,1); result1=Y; Uk=zeros(block_num,1); Ub=Uk; for m=1:(n-1) Ub=Uk; Uk=W*Y+W0*r; Uf=2*Uk-Ub; Udot=(Uk-Ub)/h; %****** 零阶保持器 ******% X=FI'.*X+FIM'.*Uk; Y=FIC'.*X+FID'.*Uf; Y(1)=satur(Y(1),c); result1=[result1,Y]; end Y0=[0 0 0 0 0]'; Y=Y0; X=zeros(block_num,1); result2=Y; Uk=zeros(block_num,1); Ub=Uk; for m=1:(n-1) Ub=Uk; Uk=W*Y+W0*r; Uf=2*Uk-Ub; Udot=(Uk-Ub)/h; %****** 一阶保持器 ******% X=FI'.*X+FIM'.*Uk + FIJ'.*Udot; Y=FIC'.*X + FID'.*Uf; Y(1)=satur(Y(1),c); result2=[result2,Y]; end plot(t,result1(5,:),'-.',t,result2(5,:),'--',t,ScopeData.signals.values,'k'); legend('零阶保持器','一阶保持器','Simulink'); 复制代码   3、在Simulink中绘制仿真图 注意:Simulink中的变量名和工作区变量关联方法请点击:https://www.cnblogs.com/KaifengGuan/p/11942615.html 四、实验结果 https://www.cnblogs.com/KaifengGuan/p/11942180.html