前面介绍了变分法与极小值原理的基础思想,之后有一个非常重要的应用就是线性二次型的最优控制问题。假如系统是线性的,性能泛函是状态变量与控制变量的二次型函数的积分,那么这样的问题称之为线性二次型最优控制问题。形如:
![](https://img-blog.csdnimg.cn/img_convert/d3b3c04e8b3981559253310cda3bdefd.png)
上式中,Q1为状态加权矩阵,Q2为控制加权矩阵,Q0为终端加权矩阵。(有些书中把Q2矩阵写作R矩阵)
在实际应用中,Q1,Q2是对称矩阵并且常取对角阵。
在实际的应用中,第一项为 Lx = 1/2 * xT * Q1 * x,其中x表示状态误差,x越大,代价函数Lx越大,Q1的对角线上的元素q1i表示的是对应误差分量xi的重视程度,越被重视的误差分量,就希望它越小,相应的加权系数就取得越大:
![](https://img-blog.csdnimg.cn/img_convert/26e138177f8a2adc60a6d8ebac0d7255.png)
例如上式,对x1更重视,就把q11设置得更大一点。
被积函数中的第二项 Lu = 1/2 * uT * Q2 * u,代表动态过程中对控制的约束与要求。一般就取单位阵就可以。
被积函数中的第三项突出了对终端误差的要求,看自身需求来确定,在有些场合需要,在有些场合不需要。
对于一般的系统,如何进行求解?可以按照下面的步骤:
![](https://img-blog.csdnimg.cn/img_convert/e0808d2a9f73bbe905111d10c5dd5516.png)
对于以上的一般系统,可以先构造哈密顿函数:
![](https://img-blog.csdnimg.cn/img_convert/1f909b5d49ed21f4dd43ba92f953d258.png)
之后根据最优控制求出最优控制时的控制量u的表达式,之后根据正则方程,将最优的u带入进去,得到一个最优轨迹的表达式以及λ:
![](https://img-blog.csdnimg.cn/img_convert/35994bf4d5cb7166758d53125957fcfe.png)
之后引入一个新的矩阵P来表示λ与x的关系:λ = Px,之后便可以由P表示出最优控制率K,之后再将引入控制器的u带入回原系统(此时u可以由x来表示,因此可以合并),得到原系统的闭环表达式,之后便可以得到一个黎卡提方程:
![](https://img-blog.csdnimg.cn/img_convert/9df17f658849a3db37a05b9afbc65b33.png)
以上只是演示一下推导的步骤,实际上当然不需要这么繁琐,这个黎卡提方程也不需要我们每次都手算,由matlab,我们可以得到一个matlab推荐的值,不过这个黎卡提的一般求解方法也确实是一个世界难题。
实例:
假设我们有一个比较简单的系统:x_dot = x + u,性能泛函就是线性二次型性能泛函的一般形式,那么按照这个步骤,便可以求出一个最优控制率:
![](https://img-blog.csdnimg.cn/img_convert/5b8c2071cc865a8e2498e90a543bacbf.png)
其实使用matlab的话,是可以直接得到这个矩阵K的,之后代入就可以了,我自己做了一个简单的sumilink模型来验证一下:
![](https://img-blog.csdnimg.cn/img_convert/7b6ddfa9de60b5054255303777852c0b.png)
按照那个方程画出模型:
![](https://img-blog.csdnimg.cn/img_convert/10a03c5cac5a938f1cbc33b7e65d0c7d.png)
之后就可以看出最后的控制效果:
![](https://img-blog.csdnimg.cn/img_convert/eec70f8b7bfbbf1460758a8334926176.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)