MATLAB课件6.5线性化模型教程
6.5 仿真系统的线性化模型;1. 系统平衡点的确定 在大多数的系统设计中,设计者都需要进行稳定性分析,因为绝大多数的系统在运行之中,都需要按照某种方式收敛到指定的平衡点处。 这里所谓的平衡点一般指的是系统的稳定工作点,此时系统中所有的状态变量的导数均为0,系统处于稳定的工作状态。
可以使用命令trim对系统的稳定性与平衡点进行分析。; 利用Simulink提供的trim( )函数可根据系统的模型文件来求出系统的平衡点。 该函数的调用格式如下 [x,u,y,dx]=trim(‘model’,x0,u0,y0,ix,iu,iy) 其中,参数model是模型文件名。 初始状态x0、初始输入u0与初始输出y0。 ix,iu,iy都是整数向量,它们的元素指示初始向量x0,u0,y0中哪些分量固定不变,即为固定输出。
注意:模型的输入和输出用输入/输出接口模块(In1/Out1)来表示。; 详细功能描述 根据系统的输入、初始状态(也可以说是初始的工作点),按照一定的方法求取系统中距离此工作点最近的平衡点,以及在达到平衡点时的系统输入与输出。如果系统中不存在平衡点,则trim命令会返回系统状态变量最接近0的工作点。
;2. 连续系统的线性化模型 利用Simulink提供的函数linmod( )和linmod2( ) 可以根据模型文件(同上系统的输入和输出必须由 Connections库中的In1和Out1模块来定义)得到线性化模型的状态参数A、B、C和D,它们的调用格式为[A,B,C,D]=linmod(‘model’,x,u,)[A,B,C,D]=linmod2(‘model’,x,u,) 在指定的系统状态x与系统输入u下对系统model进行线性化处理,x和u分别为平衡点处的状态向量和输入向量,缺省值为0。A、B、C与D为线性化后的系统状态空间描述矩阵。; 由linmod2( ) 所得线性模型比linmod( )准确,当然所需的运行时间也更多。 对于线性系统上面的调用格式可简写为 [A,B,C,D]=linmod(‘model’) [A,B,C,D]=linmod2(‘model’);3. 离散系统的线性化模型 Simulink提供的函数dlinmod( ) 能够从非线性多频率采样离散--连续混和系统中提取一个在任何给定的采样周期Ts下的近似线性模型。 当Ts取零时,可得近似的连续线性模型,否则,得到离散线性模型。该指令的一般调用格式为[Ad,Bd,Cd,Dd]=dlinmod(‘model’,Ts,x,u,) 其中 Ts为指定的采样周期,其它参数同连续系统中。;例6-14 求图6-57 所示非线性系统的平衡工作点,及在平衡工作点附近的线性模型 。;解 (1)饱和非线性模块(Saturation);在MATLAB指令方式下,运行以下指令可求出平衡点。>> x=[0;0;0];u=0;y=[1;1]; >> ix=[ ]; %不固定任何状态>> iu=[ ]; %不固定输入>> iy=[1;2]; %固定输出y(1)和y(2)>>[x,u,y,dx]=trim('ex6_14', x,u,y,ix,iu,iy)
以上几行命令等同于[x,u,y,dx]=trim('ex6_14',[],[],[1;1],[],[], [1;2]) %寻找输出固定为1的平衡点
;结果显示:x =
-0.0000 0.5380 0.5000
u =
1.0380
; 在MATLAB指令方式下运行以下命令可得到系统在平衡工作点附近的线性模型>>[A,B,C,D]=linmod('ex6_14');>>[num,den]=ss2tf(A,B,C,D);>> printsys(num,den,'s')
结果显示: num(1)/den = -8.8818e-016 s^2 + 1 s + 1 -------------------------------- s^3 + 2.4 s^2 + 2.4 s + 2 num(2)/den = s^3 + 2.4 s^2 + 2.4 s + 1 --------------------