MATLAB课件6.5线性化模型分析
6.5 仿真系统的线性化模型 主要内容概述 一般的非线性系统分析中,常需要在平衡点处求系统的线性化模型。 利用Simulink提供的基本函数,可对非线性系统进行线性化处理。 用数学方法描述,平衡点是系统状态导数为零的点。 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 所示非线性系统的平衡工作点,及在平衡工作点附近的线性模型 。 在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