本文介绍代数黎卡提方程的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);