线性二次型最优控制

2023-05-16

本文涉及的李雅普诺夫方法的内容可参见另一篇博文:李雅普诺夫(第二方法)稳定性分析

目录

  • 一、连续时间系统线性二次型最优控制
    • 1.1 问题的提出
    • 1.2 问题的分析
    • 1.3 问题求解
    • 1.4 MATLAB函数
    • 1.5 例题
  • 二、离散时间系统线性二次型最优控制
    • 2.1 自治系统
    • 2.2 闭环控制系统
  • 三、参考文献

一、连续时间系统线性二次型最优控制

1.1 问题的提出

控制器设计的目的:
(1)使得闭环系统稳定
(2)使得闭环系统具有给定的动态和稳态性能
控制器设计的方法:极点配置到左半平面;对高阶系统用配置主导极点来实现
问题:根据闭环系统的性能来决定极点配置的位置,但这个性能依赖于模型,不够直接
从阶跃响应来看,系统的动态和稳态性能好坏可以用阴影部分面积大小来衡量:
在这里插入图片描述
用积分来表示:
在这里插入图片描述
其中r0是阶跃输入的幅值。但是积分存在正负抵消问题,不可用。
可以取绝对值,但是绝对值不好处理,一般取平方项来处理:
在这里插入图片描述
如果有多个变量,把所有的平方项加起来之后再积分:
在这里插入图片描述
也可以对不同变量做加权平方和:
在这里插入图片描述
其中
在这里插入图片描述
称为加权矩阵。一般的形式为:
在这里插入图片描述
要求Q是半正定的,为了方便也可以要求Q是正定的。
这个J就是二次型积分性能指标,它衡量了:系统稳定性、上升时间、超调、调节时间、振荡这些指标。
问题:没有考虑控制能量的消耗,即
在这里插入图片描述
多个控制信号,则为:
在这里插入图片描述
也可以加权,并用二次型积分性能指标来表示为:
在这里插入图片描述
综上,同时考虑系统性能和控制能量要求,得到一般的积分性能指标:
在这里插入图片描述
关于系统的其他信息:
连续时间系统状态空间模型:
在这里插入图片描述
控制器u的设计目标:使J尽可能小。其实是优化问题,这就是线性二次型最优控制问题(linear quadratic optimal control)。

1.2 问题的分析

什么情况下这个问题可解?如果可解,怎么设计最优控制器u?如果设计好了u,闭环系统的性能怎么样,能不能保证它是渐近稳定的?
先缩小问题分析的范围:确定控制器的类型(输出反馈/状态反馈/静态反馈/动态反馈)作为前提:选用最简单的静态状态反馈控制器:
在这里插入图片描述
对于上面的系统,在状态反馈控制器作用下,导出的闭环系统是:
在这里插入图片描述
对应的性能指标是:
在这里插入图片描述
最优控制问题整理成:
在这里插入图片描述
如何求解这个优化问题是关键。

1.3 问题求解

正面分析:求解闭环系统方程,然后代入J,再求最小值。但是这种方法太过复杂了。
从目标角度分析:如果J有最小值,那么函数是有限可积的,那么在t趋于无穷的时候,x必然是趋于0,否则积分结果一定是无穷大。因此,闭环系统是渐近稳定的。进一步地,因为渐近稳定,所以存在李雅普诺夫函数:
在这里插入图片描述
其中P是待定的对称正定矩阵。这个V沿闭环系统关于时间的导数应为:
在这里插入图片描述
它必须是负定的。
怎么用这个条件呢?我们在原来的目标函数上做一点改变:
在这里插入图片描述
主要是原来的目标函数里面只有一项含有K,不好处理,现在V的导数里也有K,可以一起处理。进一步:
在这里插入图片描述
因为系统渐近稳定,x趋于0,所以V也趋于0,因此把最后一项写出来:
在这里插入图片描述
因为P在后面会取一个常值,所以要优化的变量依然是K,把所有与K有关的项放在一起:
在这里插入图片描述
这里K的函数结构类似于二次函数,类比二次函数配方法求极值:
在这里插入图片描述
观察上面的式子,R相当于a,K应该减去一个项,作为平方项的一项,比如设:
在这里插入图片描述
和上面的比较,得到:
在这里插入图片描述
取最简单的情况:R、K为可逆阵,则
在这里插入图片描述
代入得:
在这里插入图片描述
在这里插入图片描述
因此,取
在这里插入图片描述
的时候,带K的部分取最小值为0:
在这里插入图片描述
由于P还没确定,所以K不能说是求出来了,根据现在的目标函数,可以选择合适的P,满足下面的式子,使得当前的目标也最小:
在这里插入图片描述
这个方程是riccati方程。对比李雅普诺夫函数对应的李雅普诺夫方程:
A T P + P A = − Q A^TP+PA=-Q ATP+PA=Q
可以看到,现在的式子相当于是让Q减小了。而Q反应了能量衰减的速度,说明在要求控制器最优的时候,能量衰减的速度更慢了。为了节约输入的能量,而牺牲了衰减速度,这也体现了二者的平衡。
现在的性能指标最小值为:
在这里插入图片描述
综上,整体的求解步骤为:
(1)求解riccati方程,如果有一个对称正定的解P,那么
(2)得到最优解
在这里插入图片描述
(3)最优闭环控制系统
在这里插入图片描述
(4)性能指标最小值为
在这里插入图片描述
问题:riccati方程未必有对称正定解P。就算有解,得到的P是否能成为闭环系统的李雅普诺夫矩阵,即最优闭环控制系统是否渐近稳定?
解决方案:
定理:如果(A,B)能控,则riccati方程存在对称正定解P。因此状态反馈二次型最优控制问题可解。
利用这个P,可以构造李雅普诺夫函数:
在这里插入图片描述
沿闭环系统轨迹线求导:
在这里插入图片描述
因此,闭环系统是稳定的。
补充:稳定化控制器的设计方法:
(1)基于李雅普诺夫稳定性理论的设计方法
适用于:时变、非线性系统
可推广到模糊控制、鲁棒控制、非线性控制
(2)极点配置方法
适用于:线性定常系统
(3)线性二次型最优控制方法

1.4 MATLAB函数

在这里插入图片描述

1.5 例题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、离散时间系统线性二次型最优控制

2.1 自治系统

自治系统的离散时间模型:
在这里插入图片描述
假设系统渐近稳定,即A的特征值都在单位圆内。系统初态x(0)已知。性能指标:
在这里插入图片描述
问题:如何计算系统的性能指标值?直接计算:求无穷级数和,有点烦,只适合计算机。
解决方案:
既然系统是渐近稳定的,就有对任意正定矩阵Q,李方程
在这里插入图片描述
有对称正定解P,可以构造李函数:
在这里插入图片描述
和它的导数:
在这里插入图片描述
把李方程
在这里插入图片描述
代入指标函数得到:
在这里插入图片描述
好处:通过求解李方程,就可以求出无穷级数的和。

2.2 闭环控制系统

系统模型:
在这里插入图片描述
二次型性能指标:
在这里插入图片描述
定理:如果(A,B)能控,那么离散系统线性二次型最优控制问题有解,最优控制器是
在这里插入图片描述
P矩阵满足
在这里插入图片描述
这是离散系统的riccati方程。

三、参考文献

[1] 田玉平,蒋珉,李世华.自动控制原理[M].北京:科学出版社,2006
[2] 俞立.现代控制理论 浙江工业大学 https://www.bilibili.com/video/BV1a4411j7GF

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性二次型最优控制 的相关文章

  • js实现省市联动

    效果图如下 xff1a 思路很简单 xff0c 就是先加载省信息 xff0c 然后当省改变的时候加载市县信息 烦的是数据的录入 xff0c 代码如下 lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 T
  • 正则在小偷程序中的应用(续)

    获取资源信息 content 61 file get contents 34 http list sososteel com qg list html pg 61 1 amp h 61 34 time 对抓取的信息进行处理 取class为l
  • mysql密码过期问题解决方案

    mysql密码过期问题解决方案 问题再现 xff1a 密码过期 旧电脑许久没有用 xff0c 今天打开发现数据库连接不上了 提示密码过期 xff0c 请修改密码 ERROR 1862 HY000 Your password has expi
  • Fast RTPS(DDS) 安装指南

    Foonathan Memory 在构建 Fast DDS 之前 xff0c 需要先安装 Foonathan Memory 依赖 span class token function git span clone https github c
  • ubuntu的两种软件安装方式

    第一种 xff1a sudo apt get install xxxxxxx 第二种 xff1a sudo dpkg i xxxx deb 参考文章
  • Ethernet下字节序和bit序的总结

    Ethernet下字节序和bit序的总结 本文讲述的是在ethernet中多字节数据发送时涉及到字节序和bit序的剖析 关于字节序 大小端 和bit序 xff0c 以及MSB和LSB的叙述 xff0c 请另行学习 xff0c 本篇不涉及 正
  • C++ 智能指针 unique_ptr 详解与示例

    unique ptr 是 C 43 43 11 提供的用于防止内存泄漏的智能指针中的一种实现 xff0c 独享被管理对象指针所有权的智能指针 unique ptr对象包装一个原始指针 xff0c 并负责其生命周期 当该对象被销毁时 xff0
  • ECMAScript 6 中的数组方法 - forEach

    let colors 61 red blue green es5 遍历数组的方法 span class hljs keyword for span let span class hljs keyword index span 61 span
  • ECMAScript 6 中的数组方法 - map

    span class hljs variable span 场景 span class hljs number 1 span 假设有一个数字数组 xff08 a xff09 xff0c 奖a数组中的值一双倍的形式放到b数组 span cla
  • 写在Paper Reading之前

    写在Paper Reading 之前 2016年第一篇文章 xff0c 就以paper reading开头 xff0c 这段时间最少写五篇 xff0c 达到申请专栏的条件 通过申请专栏 xff0c 也可以达到监督作用 xff0c 催促自己多
  • C++进程PID编程

    一 获取pid t的字节长度 1 代码 include lt iostream gt using namespace std int main int argc char argv pid t pid cout lt lt 34 sizeo
  • 异常检测——集成学习

    Ensembles for Unsupervised Outlier Detection Challenges and Research Questions 首先 xff0c 知道一个模型好不好 xff08 精确不 xff09 外部指标内部
  • Centos 防火墙

    一 对于centos7自带的防火墙的相关指令 systemctl stop firewalld service 停止firewall systemctl disable firewalld service 禁止firewall开机启动 sy
  • MissionPlanner编译流程及问题详解

    MissionPlanner编译流程及问题详解 一 xff0c 介绍 MissionPlanner是一款基于C 开发的开源的地面站软件 xff0c 主要用在Windows Linux平台 MP使用广泛 xff0c 提供了较为完善的功能 xf
  • 学术论坛第三期:多指标异常检测方法综述

    学术论坛 第三期 推荐阅读时长 xff1a 13min 前言 朋友们 xff01 本期内容干货满满 xff01 参考文献引用30余篇 xff01 xff01 答应我这篇文章一定要看 xff01 xff01 xff01 本期论坛我们邀请中国人
  • 数据平台与Flink任务运行原理介绍

    本文将从5个方面详细介绍数据平台大数据任务开发的基础知识 包含数据平台的简介 如何在平台内创建Flink表 如何编写Flink大数据处理作业 Flink任务启动时的调用流程以及Flink web UI 任务监控页面 此外 xff0c 将重点
  • vue中模板和组件分离

    vue中模板和组件分离 第一种 xff1a 使用script xff0c 将其类型跟改为text x template 代码示例如下 xff1a span class token operator lt span span class to
  • vue中的生命周期(钩子函数)

    vue中的生命周期 xff08 钩子函数 xff09 下图是整个vue的生命周期 生命周期共有八个钩子函数 生命周期 xff1a vue是一个构造函数 xff0c 执行这个函数的时候 xff0c 即相当于实例化了这个函数 xff0c 因此我
  • paddle的两阶段基础算法基础

    paddle的两阶段基础算法详解与实践 有三部分分别是 xff1a 1 xff0c 两阶段算法发展历程 2 xff0c Faster R CNN原理解析 3 xff0c Paddle Detection实战演练 一 xff1a 两阶段算法的
  • Faster R-CNN网络架构

    Faster R CNN网络架构原理解析 Anchor的第一个分支是一个分类分支负责判断途中有没有东西 xff0c 但是不会判断物品 第二个分支是回归分支表示Anchor和真实值有多远最终提取的候选框尽量向真实值靠拢 RPN层是如何提取候选

随机推荐

  • Faster R-CNN原理详解

    Faster R CNN原理详解 首先将RPN输出以及将anchor解码 xff0c 然后对预测框进行clip xff0c 然后对预测狂进行过滤 xff0c filter将面积太小的过滤掉 xff0c 然后将分数较低的去掉 xff0c NM
  • linux出现“INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案

    1 问题描述 最近搭建的一个linux最小系统在运行到241秒时在控制台自动打印如下图信息 xff0c 并且以后每隔120秒打印一次 仔细阅读打印信息发现关键信息是 hung task timeout secs xff0c 第一次遇到这样的
  • vue中的计算属性和侦听器

    vue中的计算属性和侦听器 computed xff08 计算属性 xff09 在模板中放入太多的逻辑不但难以维护 xff0c 就连作者自身在看到代码的时候可能都难以理解 vue开发了计算属性 xff0c 计算属性是依赖于本身的响应式以来进
  • vue-列表的渲染

    vue 列表的渲染 vue的列表渲染指令是基于v for的 xff0c 官方文档中是这么说的 v for 指令需要使用 item in items 形式的特殊语法 xff0c 其中 items 是源数据数组 xff0c 而 item 则是被
  • vue-事件处理

    vue 事件处理 一般使用v on来进行事件监听 xff0c 在监听DOM事件时会触发一部分的js代码 使用v on xxx或 64 xxx绑定事件 xff0c xxx指 事件名 事件的回调要写在methods对象中 xff0c 最终会放在
  • R-CNN算法优化策略

    R CNN算法优化策略 1 xff0c 两阶段检测的进阶模型 首先进行数据处理 xff0c 然后输入backbone得到特征图 xff0c 然后进入RPN中提取候选区域roi xff0c 然后再ROI Align提取特争 xff0c 然后送
  • 一篇文章让你从入门到彻底学会Java

    一篇文章让你从入门到彻底学会Java 文章目录 一篇文章让你从入门到彻底学会Java第一个Java程序 43 基础知识详解Java的对象和类Java中的数据类型Java变量类型Java运算符Java中的循环Java 条件语句Java中的sw
  • vue-进入/离开&列表过渡

    vue 进入 离开 amp 列表过渡 在 CSS 过渡和动画中自动应用 class可以配合使用第三方 CSS 动画库 xff0c 如 Animate css在过渡钩子函数中使用 JavaScript 直接操作 DOM可以配合使用第三方 Ja
  • vue中的路由基础

    vue中的路由 在使用vue router之前 xff0c 首先需要安装该插件 首先在cmd中使用npm install vue router进行插件的安装 xff0c 如果要在工程项目中使用它必须通过Vue use 明确地安装路由功能 就
  • 前端面试的基础四十小问(前20问)

    文章目录 1 什么是HTML语义化 xff1f 2 标签title与alt属性的区别是什么 xff1f 3 iframe的优缺点 xff1f 4 介绍一下CSS的盒子模型 xff1f 5 垂直居中的几种方式 xff1f 6 rgba和opa
  • 前端面试题--react与vue的区别

    前端面试题 react与vue的区别 首先从架构层面来看 xff0c vue是MVVM架构 xff0c 是一个灵活易用的渐进式双向绑定 xff0c 而react并没有准确的架构模式 xff0c react准确的架构模式是调和器和渲染器 xf
  • 前端面试题--详解flex

    前端面试题 详解flex Flex是指弹性盒子布局的意思 Flex的主要作用是 xff1a 解决元素居中问题 xff0c 自动弹性伸缩 xff0c 自动适配不同大小的屏幕和移动端 Flex的术语解释 xff1a 二成员 xff1a 容器和项
  • Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w

    sysctl命令用于运行时配置内核参数 xff0c 这些参数位于 proc sys目录下 sysctl配置与显示在 proc sys目录中的内核参数 xff0e 可以用sysctl来设置或重新设置联网功能 xff0c 如IP转发 IP碎片去
  • 前端面试题--vue的父子组件通信

    前端面试题 vue的父子组件通信 比较常见的就是父组件为控制组件子组件为视图组件 父组件传递数据给子组件使用 xff0c 遇到业务逻辑操作时子组件触发父组件的自定义事件 子组件接受使用父组件的数据 xff0c 这里的数据包括属性和方法 xf
  • 前端面试题--了解并简单介绍一下typescript

    前端面试题 了解并简单介绍一下typescript TypeScript是JavaScript的超集 xff0c 具有可选的类型并可以编译为纯JavaScript 从技术上讲TypeScript就是具有静态类型的 JavaScript 向J
  • HashMap MAXIMUM_CAPACITY 为什么设置成1 << 30---Java源码

    为什么是1 lt lt 30因为2个因素造成的 正如上楼的 MrAmity 所说 xff0c HashMap在确定数组下标Index的时候 xff0c 采用的是 length 1 amp hash的方式 xff0c 只有当length为2的
  • MATLAB循环结构与嵌套循环

    循环结构又称为重复结构 xff0c 是利用计算机运算速度快以及能进行逻辑控制得我特点来重复执行默写操作 while循环 while语句多用于循环次数不确定的情况 xff0c 而对于循环次数确定的情况 xff0c 使用for语句更方便 针对不
  • 机械臂(4)–正向求解

    最近准备研究下机械臂的运动分析 xff0c 本文记录相关过程 关于运动求解 xff0c 鄙人才疏学浅 xff0c 很多内容没有深入理解 xff0c 只是简单知道这个是什么 xff0c 代表什么意思 xff0c 怎么用 xff0c 关于原理了
  • Gazebo/Rviz仿真打开URDF模型

    当我们通过Solidworks成功导出URDF模型之后 xff0c 我们当然很希望在ROS中观察到自己导入的模型 ROS中有两个非常好的插件 xff0c 一个是RViz另一个是Gazebo 其中RViz类似一个可视化平台 xff0c 而Ga
  • 线性二次型最优控制

    本文涉及的李雅普诺夫方法的内容可参见另一篇博文 xff1a 李雅普诺夫 xff08 第二方法 xff09 稳定性分析 目录 一 连续时间系统线性二次型最优控制1 1 问题的提出1 2 问题的分析1 3 问题求解1 4 MATLAB函数1 5