线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)
参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf
本文参考讲义中的第20页PPT,根据Hamilton-Jacobi方法,推导得到黎卡提方程的数值迭代求解方法(可实时在线求解黎卡提方程),具体推导过程请参考PPT。本文列出最后的结论及对应的matlab代码,其他编程语言也可参考贴出的代码自行改编。

对应的matlab代码如下:
%%%参考文献dlqr
close all
A=[1 1;0 1];
B=[0;1];
C=[1 0];
Q=C'*C;
Qf=C'*C;
R=10*ones(1,1);
[p,L,k] = dare(A,B,Q,R) x0=[100;10]*1e-2;
N=20;%每一时间步求解器迭代次数,一般20足够,若不收敛,则适当增大该值 P=zeros(2,2,N+1); P(:,:,N+1)=Qf; for t=2:(N+1)
tUsed=(N+3-t);
P(:,:,tUsed-1)=Q+A'*P(:,:,tUsed)*A-A'*P(:,:,tUsed)*B/(R+B'*P(:,:,tUsed)*B)*B'*P(:,:,tUsed)*A;
end
s=P(:,:,1) K=zeros(N,2);
U=zeros(N,1);
X=zeros(N+1,2);
X(1,:)=x0;
for t=1:N
K(t,:)=-(R+B'*P(:,:,t+1)*B)\B'*P(:,:,t+1)*A;
U(t,:)=K(t,:)*X(t,:)';
X(t+1,:)=(A*X(t,:)'+B*U(t,:))';
end
k=K(1,:) figure (30)
PlotX=1:N;
plot(PlotX,K(:,1),'o-b');
hold on
plot(PlotX,K(:,2),'o-r');
title('反馈系数K') figure (40)
PlotX=1:N+1;
plot(PlotX,X(:,1),'o-b');
hold on
plot(PlotX,X(:,2),'o-r');
title('状态X') figure (50)
PlotX=1:N;
plot(PlotX,U(:,1),'o-b');
title('控制输入U')
线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)的更多相关文章
- PCB仿真软件与电磁场求解器的算法
1. 简介 目前商业化的PCB仿真软件主要有: Cadence公司的Sigrity.Ansys公司的SIwave/HFSS.CST公司的CST.Mentor公司的HyperLynx.Polor公司的S ...
- 地理围栏算法解析(Geo-fencing)
地理围栏算法解析 http://www.cnblogs.com/LBSer/p/4471742.html 地理围栏(Geo-fencing)是LBS的一种应用,就是用一个虚拟的栅栏围出一个虚拟地理边界 ...
- KMP串匹配算法解析与优化
朴素串匹配算法说明 串匹配算法最常用的情形是从一篇文档中查找指定文本.需要查找的文本叫做模式串,需要从中查找模式串的串暂且叫做查找串吧. 为了更好理解KMP算法,我们先这样看待一下朴素匹配算法吧.朴素 ...
- Peterson算法与Dekker算法解析
进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations lik ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- Java虚拟机对象存活标记及垃圾收集算法解析
一.对象存活标记 1. 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器就减1:任何时刻计数器都为0的对象就是不可能再被使用的. 引用计数算法(Re ...
- JVM垃圾回收算法解析
JVM垃圾回收算法解析 标记-清除算法 该算法为最基础的算法.它分为标记和清除两个阶段,首先标记出需要回收的对象,在标记结束后,统一回收.该算法存在两个问题:一是效率问题,标记和清除过程效率都不太高, ...
- DeepFM算法解析及Python实现
1. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中,FM算法负责对一阶 ...
- GBDT+LR算法解析及Python实现
1. GBDT + LR 是什么 本质上GBDT+LR是一种具有stacking思想的二分类器模型,所以可以用来解决二分类问题.这个方法出自于Facebook 2014年的论文 Practical L ...
随机推荐
- (三)ajax请求不同源之cors跨域
一.基本原理 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)它允许浏览器向跨源服务器,发出 XMLHttpReque ...
- SpringCloud教程 | 第一篇: 服务的注册与发现
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
- 转 Using Async for File Access
原文:https://msdn.microsoft.com/en-us/library/jj155757.aspx using System; using System.Collections.Gen ...
- 王燕 201771010126《面向对象程序设计(java)》第一周学习总结
王燕 201771010126<面向对象程序设计(java)>第一周学习总结 王燕 201771010126<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部 ...
- Go语言基础之time包
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...
- [LeetCode] Transform to Chessboard 转为棋盘
An N x N board contains only 0s and 1s. In each move, you can swap any 2 rows with each other, or an ...
- 白盒测试实践-day01
一.任务进展情况 了解本次测试的主要任务,进行小组分工. 二.存在的问题 由于最近比较忙,任务来不及做. 三.解决方法 坚持一下.
- js上课笔记
Html 结构化CSS 样式JavaScript 行为交互01.JavaScript基础02.JavaScript操作BOM对象03.JavaScript操作DOM对象 *****04.JavaScr ...
- Math工具类
public static void main(String[] args) { // 工具类,所有方法都以静态方法提供,没有实例存在的意义 // 不提供任何实例的方法,代表当前类属于无状态的. // ...
- spring mvc 总结
依赖包 <!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> &l ...