最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation) | 您所在的位置:网站首页 › 卡西欧矩阵方程 › 最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation) |
本文介绍代数黎卡提方程的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 实验室设备网 版权所有 |