线性二次型最优控制器的实现 下载本文

南 京 师 范 大 学

最优化与最优控制

题 目:学 院:专 业:专业方向:班 级:姓 名:指导教师:填写日期:

最优化与最优控制 电气与自动化工程学院 控制理论与控制工程

基于ARM的太阳跟踪系统 学 号: 131802030 魏骁 孙 骥 职 称: 教授 2014年6月21 日

一、前言

应用经典控制理论设计控制系统,能够解决很多简单、确定系统的实际设计问题。但是对于诸多新型而复杂的控制系统,例如多输入多输出系统与阶次较高的系统,往往得不到满意的结果。这时就需要有在状态空间模型下建立的最优控制策略。

最优控制是现代控制理论的核心。所谓最优控制,就是在一定条件下,在完成所要求的控制任务时,使系统的某种性能指标具有最优值。根据系统不同的用途,可提出各种不用的性能指标。最优控制的设计,就是选择最优控制,以使某一种性能指标为最小。

二、线性二次型最优控制概述

线性二次型最优控制设计是基于状态空间技术来设计一个优化的动态控制器。系统模型是用状态空间形式给出的线性系统,其目标函数是状态和控制输入的二次型函数。二次型问题就是在线性系统约束条件下选择控制输入使二次型目标函数达到最小。

线性二次型最优控制一般包括两个方面:线性二次型最优控制问题(LQ问题),具有状态反馈的线性最优控制系统;线性二次型Gauss最优控制问题,一般是针对具体系统噪声和量测噪声的系统,用卡尔曼滤波器观测系统状态。 三、最优控制理论

假设线性时不变系统的状态方程模型为 x‘(t)=Ax(t)+Bu(t)

y(t)=Cx(t)+Du(t)

引入一个最优控制的性能指标,即设计一个输入量u,使得 J=

为最小。其中Q和R分别为对状态变量和输入变量的加权矩阵; tf为控制作用的终止时间。矩阵S对控制系统的终值也给出某种约束,这样的控制问题称为线性二次型(Linear Quadratic,简称LQ)最优控制问题。 为了求解LQ问题,我们取Hamilton函数 H(t,x(t),u(t),?(t)) TTT?0.5(x(t)Q(t)x(t)?u(t)R(t)u(t))??(t)(A(t)x(t)?B(t)u(t));

?H?(t)????(Q(t)x(t)?A(t)?(t));?? ?H?0(Q(t)x(t)?A(t)?(t))); ?ux'(t)?A(t)x(t)?B(t)u(t);并应用变分原理推导出LQ问题解满足的必要条件:

其中一种较为简便的解法为: 令?(t)=P(t)x(t)

而将对?(t)的求解转化到对函数矩阵P(t)的求解,特别的,将?(t)=P(t)x(t)代入上述式子中可得函数矩阵P(t)因满足的微分方程是

P'(t)??Pt(A)t(?)ATtP(t)?(P)tBt(R)(tB)Tt(P)t?(Q)t()P(tf)?S.?1

(); (1)

对它的求解可应用成熟的Euler方法。假定方程(1)的唯一对称半正定解P(t),则LQ问题的解u(t)由下式给出: u^(t)??R?1(t)BT(t)P(t)x(t). 上述LQ问题的一个特例是动态方程为定常的情形,即相应的控制向量取为u(t)=-Kx(t).

其中,K为才是矩阵,而二次性能指标为?

J=?(xT(t)Qx(t)?uT(t)Ru(t))dt. 0 这里Q和R是给定的实对称正定(或半正定)矩阵`,它们规定了误差和控制信号能量

消耗的模式,在这特别的情形,我们可求出 -1TK=RBP

这里P满足方程: ATP?PA?PBR?1BTP?Q?0;

的唯一对称半正定矩阵解

四、最优控制设计

本设计通过具体的实例介绍MATLAB环境下设计一个线性二次型最优控制的过程和方法。由于代数李卡蒂方程求解过程中仅涉及矩阵运算,所以很适合用MATLAB软件处理,在MATLAB的控制系统分析与设计工具箱中提供了求解代数李卡蒂方程的函数lpr(),其具体调用方式如下:

[K,P,E]=lpr(A,B,Q,R)

其中矩阵A、B、Q、R的意义如前所述,返回的K矩阵为状态反馈矩阵,P为李卡蒂方程的解,E为闭环的极点。 构造的的系统方程如下: ?010??0?????x=?001?X+?1?U

?0?2?3??1?????.Y=(1 0 0)X

性能指标为J=?[XTQX+uTRu]dt,其中Q,R为

0??a1?Q=?0?0?0a200??0? R=[0.01] a3??要设计状态反馈控制器,使J最小

Q矩阵参数选择如下:

a1=100 a2=a3=1

在MATLAB环境中,执行下面的M文件 A=[0 1 0;0 0 1;0 -2 -3]; B=[0;0;1]; C=[1 0 0]; D=[0];

Q=[100 0 0;0 1 0;0 0 1]; R=[0.01];

[k,p,e]=lqr(A,B,Q,R); disp('卡尔曼增益'); k

%阶跃响应 k1=k(1); Ac=A-B*k; Bc=B*k1; Cc=C; Dc=D; figure(1)

step(Ac,Bc,Cc,Dc)

title(‘最优控制后的阶跃响应’); 运行后结果如下 卡尔曼增益

k = 100. 0000 53. 1200 11. 6711

即状态反馈控制器k = [100. 0000 53. 1200 11. 6711] ,

系统输出响应的仿真。