前面介绍了变分法与极小值原理的基础思想,之后有一个非常重要的应用就是线性二次型的最优控制问题。假如系统是线性的,性能泛函是状态变量与控制变量的二次型函数的积分,那么这样的问题称之为线性二次型最优控制问题。形如:
上式中,Q1为状态加权矩阵,Q2为控制加权矩阵,Q0为终端加权矩阵。(有些书中把Q2矩阵写作R矩阵)
在实际应用中,Q1,Q2是对称矩阵并且常取对角阵。
在实际的应用中,第一项为 Lx = 1/2 * xT * Q1 * x,其中x表示状态误差,x越大,代价函数Lx越大,Q1的对角线上的元素q1i表示的是对应误差分量xi的重视程度,越被重视的误差分量,就希望它越小,相应的加权系数就取得越大:
例如上式,对x1更重视,就把q11设置得更大一点。
被积函数中的第二项 Lu = 1/2 * uT * Q2 * u,代表动态过程中对控制的约束与要求。一般就取单位阵就可以。
被积函数中的第三项突出了对终端误差的要求,看自身需求来确定,在有些场合需要,在有些场合不需要。
对于一般的系统,如何进行求解?可以按照下面的步骤:
对于以上的一般系统,可以先构造哈密顿函数:
之后根据最优控制求出最优控制时的控制量u的表达式,之后根据正则方程,将最优的u带入进去,得到一个最优轨迹的表达式以及λ:
之后引入一个新的矩阵P来表示λ与x的关系:λ = Px,之后便可以由P表示出最优控制率K,之后再将引入控制器的u带入回原系统(此时u可以由x来表示,因此可以合并),得到原系统的闭环表达式,之后便可以得到一个黎卡提方程:
以上只是演示一下推导的步骤,实际上当然不需要这么繁琐,这个黎卡提方程也不需要我们每次都手算,由matlab,我们可以得到一个matlab推荐的值,不过这个黎卡提的一般求解方法也确实是一个世界难题。
实例:
假设我们有一个比较简单的系统:x_dot = x + u,性能泛函就是线性二次型性能泛函的一般形式,那么按照这个步骤,便可以求出一个最优控制率:
其实使用matlab的话,是可以直接得到这个矩阵K的,之后代入就可以了,我自己做了一个简单的sumilink模型来验证一下:
按照那个方程画出模型:
之后就可以看出最后的控制效果:文章来源:https://www.toymoban.com/news/detail-448825.html
文章来源地址https://www.toymoban.com/news/detail-448825.html
到了这里,关于【Matlab】线性二次型最优控制问题(LQR控制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!