Riccati 方程求解及MATLAB function遇到的代码生成问题

黎卡提(Riccati)方程一般没有初等解法,但是很多实际问题与理论问题又迫切需要求得这个方程的解,这也使得这一方程成为世界著名难题。

黎卡提方程自从十七世纪黎卡提提出以来,历经三百多年一直未有一般解法,虽然有众多特例解法,但是都未能从根本上解决这个方程。

Riccati方程是形式如:

常微分方程

 

求解离散黎卡提矩阵代数方程 - 百度文库https://wenku.baidu.com/view/d2ae9c195427a5e9856a561252d380eb63942358.html求解离散黎卡提矩阵代数方程_Micozzc_lyy的博客-CSDN博客_代数黎卡提方程离散代数黎卡提方程求解1. 黎卡提方程在LQR最优控制中,有连续时间最优控制,即LQR,也有离散时间最优控制DLQR,则在求解中一定会遇到解连续时间黎卡提方程和离散时间黎卡提方程的问题,本文主要针对离散时间黎卡提方程进行求解。给定一个系统,如下所示:x(k+1)=Ax(k)+Bu(k)x(k+1) = Ax(k)+Bu(k)x(k+1)=Ax(k)+Bu(k)性能指标:J(u)=∑n=...https://blog.csdn.net/weixin_43822768/article/details/90718745

离散代数黎卡提方程求解

1. 黎卡提方程

在LQR最优控制中,有连续时间最优控制,即LQR,也有离散时间最优控制DLQR,则在求解中一定会遇到解连续时间黎卡提方程和离散时间黎卡提方程的问题,本文主要针对离散时间黎卡提方程进行求解。
给定一个系统,如下所示:

求解上述黎卡提方程有两种方法,一种是不变子空间法,另外一种是迭代法求解。 

%======求解黎卡提方程==========%
clear all;clc;close all;
A = [0.8 0.3;-0.6 0];
B = [1 0.3;0 1.4];
L = [2 0.5;1 0.3];
Q = [7 1;1 3];
R = [3 1;1 2];
[Kr,Pr]=dlqr(A,B,Q,R,L);   % 标准库求解
err = 10^(-15);
error = 10;
Pe = Q - L*inv(R)*L';
X = Q - L*inv(R)*L';
% X = (A - B*inv(R)*L')'*inv(B*inv(R)*B')*(A-B*inv(R)*L') +Q - L*inv(R)*L';
Last_Pe = Pe;
i = 1;
while (error>=err)
  Pe = (A-B*inv(R)*L')'*inv(Last_Pe + B*inv(R)*B')*(A-B*inv(R)*L') +Q - L*inv(R)*L';
  error = norm((Pe-Last_Pe),'Inf');
  Last_Pe = Pe;
  i = i +1;
end
Ke = inv(R+B'*Pe*B)*B'*Pe*A;
[X,L,G] = care(A,B,Q)
[X,L,G] = care(A,B,Q,R,S,E)
[X,L,G,report] = care(A,B,Q,...)
[X1,X2,D,L] = care(A,B,Q,...,'factor')

 

a = [-3 2;1 1]
b = [0 ; 1]
c = [1 -1]
r = 3
[x,l,g] = care(a,b,c'*c,r)

 

P = lyap(A', Q)

[P,l,g] = care(A, B, Q, R)

————————————————————————————

代数黎卡提方程通常会在求解最优控制时有所应用,比如LQR控制。

标准形式有以下两种:

1.连续代数黎卡提方程:

2.离散代数黎卡提方程:

其中P是未知量,A、B、Q、R为已知量。

离散代数黎卡提方程可以迭代求解。

matlab代码如下:

A = [0.8 0.3;-0.6 0];
B = [1 0.3;0 1.4];
Q = [7 1;1 3];
R = [3 1;1 2];

%连续黎卡提方程
P=care(A,B,Q,R)
Re = A'*P + P*A - P*B*inv(R)*B'*P + Q

%离散黎卡提方程
P=dare(A,B,Q,R)
Re = A'*P*A - (A'*P*B)*inv(R+B'*P*B)*(B'*P*A) + Q - P

%迭代解离散黎卡提方程
P = Q;
e=1;
while (e >= 1e-10)
    Pe = Q + A'*P*A - A'*P*B*inv(R+B'*P*B)*(B'*P*A);
    e = norm(Pe-P);
    P = Pe;
end
P
Re = A'*P*A - (A'*P*B)*inv(R+B'*P*B)*(B'*P*A) + Q - P

离散时间最优控制问题:
[X,L,G]=dare(A,B,Q,R), 其中A,B为系统的状态方程,Q,R为性能指标函数对应的非负定对称矩阵。
X:Riccati方程的解,即J = x’Px
L: 特征值
G:状态反馈矩阵

连续时间最优控制问题:
[X,L,G]=care(A,B,Q,R),同上;

二次型最优控制问题(取状态变量和控制变量的二次型函数的积分作为性能指标函数):
[K,P,r] = lqr(A,B,Q,R),其中K为状态反馈矩阵;P为Riccati方程的解;r为特征值

在某种Q,R的条件下lqr与care等价。

riccati-equation · GitHub Topics · GitHubGitHub is where people build software. More than 83 million people use GitHub to discover, fork, and contribute to over 200 million projects.https://github.com/topics/riccati-equation

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值