最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation) 您所在的位置:网站首页 卡西欧矩阵方程 最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation)

最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation)

2023-06-30 19:24| 来源: 网络整理| 查看: 265

本文介绍代数黎卡提方程的Matlab解法,包括直接求解和迭代求解

问题描述:

一、数值解法

可以看出,ARE方程是关于P的一个非线性方程,当系统矩阵维度较高时,难以求解,但是MATLAB给出了求解ARE的函数care

% 系统矩阵 A = [-1 0; 0 -2] % 控制输入矩阵 B = [1; 1]; % 状态权重矩阵 Q = eye(2); % 控制输入权重矩阵 R = 1; % 求解代数黎卡提方程 [P,~,~] = care(A, B, Q, R); % LQR控制器设计 K = inv(R) * B' * P; % 打印结果 disp('最优控制器增益矩阵 K:'); disp(K); 二、迭代求法

理论基础:

 具体过程:

 

 附上代码:

clear all; % 系统矩阵 A = [-1 0; 0 -2]; % 控制输入矩阵 B = [1; 1]; % 状态权重矩阵 Q = eye(2); % 控制输入权重矩阵 R = 1; % 迭代法求解代数黎卡提方程和控制策略 maxIterations = 100; % 最大迭代次数 tolerance = 1e-6; % 收敛容差 P = zeros(size(A)); % 初始化 P 矩阵 K = [0,0]; % 初始化控制增益矩阵K for i = 1:maxIterations % 求解代数黎卡提方程 X0 = P; % 初始猜测值 options = optimoptions('fsolve', 'Display', 'off'); % 设置 fsolve 的选项 P_new = fsolve(@(X) (A-B*K)'*X + X*(A-B*K) + Q + K'*R*K, X0, options); K_new = inv(R) * B' * P_new ; if norm(P_new - P, 'fro') < tolerance P = P_new; K = K_new; break; end P = P_new; K = K_new; end % 打印结果 disp('最优控制增益矩阵 K:'); disp(K);



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有