13.5 综合实例及MATLAB/Simulink应用

下面通过几个综合实例,讲述MATLAB/Simulink在本章中的应用。

【例13-1】 给定系统H_380-0-3。求最优控制,使性能指标H_380-0-2取极小值。性能指标中,H_381-01,r=1。

解:利用MATLAB求解的基本步骤如下。

【步骤1】 建立系统的模型。

首先建立给定控制系统的数学模型,MATLAB代码如下:

  1. clc; % 清除窗口显示
  2. clear; % 清除工作空间所有变量
  3. A = [0 1;0 0]; B = [0 ; 1]; C = [1 0]; D = [0]; %系统的状态空间矩阵
  4. sys = ss(A,B,C,D) % 建立控制系统的状态空间模型

【步骤2】 判断系统的可控性和可观性。

根据建立的控制系统状态空间模型,计算系统的可控矩阵,判断其可控性。

MATLAB代码如下:

  1. control = ctrb(A,B) % 计算系统的可控矩阵
  2. if rank(control) ==2 % 如果系统的可控矩阵满秩
  3. disp('系统是完全能控的!'); % 说明系统的完全能控的
  4. else % 如果不满秩
  5. disp('系统是不完全能控的!'); % 说明系统不完全能控
  6. end

程序运行结果为:

  1. control = 0 1
  2. 1 0
  3. 系统是完全能控的!

其次,还可以将H_381-0-1分解为H_381-0-2。计算相应的能观矩阵,代码如下:

  1. s = [1 0; 0 1]; observe = [s ; s * A] % 计算能观矩阵

程序运行的结果为:

  1. observe = 1 0
  2. 0 1
  3. 0 1
  4. 0 0

矩阵的秩为2,系统能改。因此,可以设计最优反馈调节器,并且使得闭环后的系统稳定。

【步骤3】 计算线性二次型最优控制的解。

根据建立好的系统模型,利用lqr函数计算线性二次型最优控制的解。

MATLAB代码如下:

  1. % 最优控制与最优性能的求解
  2. R = 1; Q = [1 0; 0 1]; [K,P,E] = lqr(A,B,Q,R) % 计算最优状态反馈的解

程序运行的结果为:

  1. K = 1.0000 1.7321
  2. P = 1.7321 1.0000
  3. 1.0000 1.7321
  4. E = -0.8660 + 0.5000i
  5. -0.8660 - 0.5000i

也就是说,最优的状态反馈为K=[1 1.7321]。因此,系统的最优控制为u=-Kx=-x1-1.7321x2。

【步骤4】 分析闭环系统的特性。

下面进一步讨论闭环系统的特性。引入状态反馈后,系统的状态转移矩阵变为H_382-01。利用MATLAB建立闭环系统的数学模型,并且比较反馈前后系统的稳定性。代码如下:

  1. A_new = A - B * K; % 反馈后系统的状态矩阵
  2. sys_new = ss(A_new,B,C,D) % 建立闭环控制系统的数学模型
  3. figure(1) % 开启新的图形窗口
  4. step(sys); % 绘制反馈前系统的阶跃响应曲线
  5. gtext('反馈前') % 给曲线添加标注
  6. figure(2) % 开启新的图形窗口
  7. step(sys_new); % 绘制反馈后系统的阶跃响应曲线
  8. gtext('反馈后') % 给曲线添加标注

程序运行的结果为:

  1. % 闭环系统的状态空间表示
  2. a = x1 x2
  3. x1 0 1
  4. x2 -1 -1.732
  5. b = u1
  6. x1 0
  7. x2 1
  8. c = x1 x2
  9. y1 1 0
  10. d = u1
  11. y1 0

对比反馈前后系统的阶跃响应曲线,如图13.1所示。

从图13.1中不难看出,反馈前系统不稳定;通过状态反馈,闭环系统稳定,并且在阶跃响应下的稳态值为1,稳态误差为0。这与步骤2中对系统能控性和能观性的分析结果相符合。

P_384-1

图13.1 对比反馈前后系统的阶跃响应曲线

从步骤3计算得出的E矩阵中也可以分析出闭环系统的稳定性。因为E是闭环系统状态矩阵的特征值,而它们都位于复平面的左半部分,因此系统是稳定的。

【例13-2】 给定离散控制系统如下:

P_382-1

求最优控制,使性能指标H_383-01取极小值。式中,H_383-02,R=1。

解:利用MATLAB求解的基本步骤如下。

【步骤1】 建立系统的模型。

首先建立控制系统的数学模型。代码如下:

  1. clc; % 清除工作窗口中的显示
  2. clear; % 清除工作空间中的所有变量
  3. A = [1 0; -1 1]; B = [1; -1]; C = [1 0]; D = [0]; %系统的状态矩阵
  4. Q = [100 0; 0 1]; R = 1; % 设定指标函数中的QR矩阵
  5. sys = ss(A,B,C,D) % 建立控制系统的状态空间模型

【步骤2】 计算离散线性二次型最优控制的解。

利用MATLAB中的dlqr命令,计算离散线性二次型最优控制的解。代码如下:

  1. [K,S,E] =dlqr(A,B,Q,R) % 计算最优控制的解
  2. A_new = A - B * K; % 反馈后系统的状态矩阵
  3. sys_new =ss(A_new,B,C,D) % 建立反馈后系统的数学模型

程序运行的结果为:

  1. K = 0.9911 -0.0942
  2. S = 100.9911 -0.0942
  3. -0.0942 10.5219
  4. E = 0.0098
  5. 0.9049

也就是说,最优的状态反馈矩阵为K=[0.9911 -0.0942]。

同时,系统进行状态反馈后的状态空间模型为:

  1. a = x1 x2
  2. x1 0.008873 0.0942
  3. x2 -0.008873 0.9058
  4. b = u1
  5. x1 1
  6. x2 -1
  7. c = x1 x2
  8. y1 1 0
  9. d = u1
  10. y1 0

【步骤3】 求取系统反馈前后的阶跃响应。

对比反馈前后系统的阶跃响应。代码如下:

  1. dstep(A,B,C,D,1,10); % 绘制反馈前系统的阶跃响应曲线
  2. hold on; % 在同一幅图像上绘制多条曲线
  3. dstep(A_new,B,C,D,1,10); % 绘制反馈后系统的阶跃响应曲线
  4. gtext('状态反馈前'); gtext('状态反馈后'); % 给曲线添加标注

程序运行的结果如图13.2所示。

可见,通过状态反馈,使得原先不稳定的系统变得稳定。

P_384-2

图13.2 状态反馈前后系统的阶跃响应曲线

习 题

【13.1】 已知某受控系统的状态空间表达式为

P_384-3

(1)利用MATLAB建立上述控制系统的数学模型;

(2)假定性能指标为H_384-01,计算使系统的性能指标J为极小值时的最优反馈矩阵K;

(3)绘制反馈前后系统的阶跃响应曲线,比较二者的不同。

【13.2】 已知二阶系统的状态空间表达式为

P_384-4

(1)利用MATLAB建立上述控制系统的数学模型;

(2)假定性能指标为H_384-02,给定的预期输出为yr=1(t)。确定使J为极小值时的控制律。

【13.3】 给定系统H_384-03。求最优控制,使性能指标

P_384-5

取极小值。