线性二次最优控制-输出跟踪器matlab

  1. 线性时变系统输出跟踪器

image

1.2 线性时变系统输出跟踪器设计步骤

image
image

2.1 线性定常系统输出跟踪器设计步骤

image

3.算例

image

4.matlab代码:

4.1 跟踪器代码

点击查看代码
function [u,x,e,ef,K,P,E] =LQ_track( A,B,C,R,Q,xt0,t0,tf,ydt)
% A,B,C,D分别为系数矩阵;xt0为初始状态向量,u为最优控制,x为最优轨线
% R为正定加权阵,Q为正定加权阵,K为状态反馈阵,P为黎氏方程矩阵
% t0和tf为时间区间,ydt为理想输出,e为瞬态输出误差,ef为终态输出误差
syms t;
Qy=C'*Q*C;
[K,P,E]=lqr(A,B,Qy,R); %求黎卡提方程矩阵P,状态反馈阵K及特征值E
gt=inv(P*B*inv(R)*B'-A')*C'*Q*ydt;   % g(t)子模块的解
AK=A-B*K; % 跟踪器状态反馈系统矩阵
Phit=expm(AK*t);   %状态转移矩阵
x=simplify(Phit*xt0+B*inv(R)*B'*gt); %最优轨线
u=simplify(-K*x+inv(R)*B'*gt);    %最优控制
y=simplify(C*x);   %输出响应
e=ydt-y;  %输出误差
ef=subs(e,t,tf);  %终端输出误差
q=size(C,1);
    for k=1:q
    subplot(2,2,k);ezplot(t,y(k),[t0,tf],1);grid;title(' ')
    xlabel('时间 t ');ylabel('输出量 y')
    end
    for k=1:q
    subplot(2,2,k);ezplot(t,e(k),[t0,tf],2); 
    grid;title(' ');xlabel('时间 t ');ylabel('输出误差 e ')
    end
end

4.2主函数代码

点击查看代码
A = [0 1;-3 -4];
b = [1;1];
C = [1 0];
xt0 = [10;10];
t0 = 0;
tf = 8;
ydt = 10;
R = 0.78;
Q = 1;
[u,x,e,ef,K,P,E] = LQ_track(A,b,C,R,Q,xt0,t0,tf,ydt);
fprintf("最优控制律 u =\n"); disp(u) ;
fprintf("输出 x = \n");disp(x) ;
fprintf("输出误差 e = \n");disp(e) ;
fprintf("终端输出误差 ef= \n");disp(ef) ;
fprintf("状态反馈矩阵 k = \n");disp(K) ;
fprintf("黎卡提代数方程的解 P = \n");disp(P) ;
fprintf("状态反馈矩阵特征值 E = \n");disp(E) ;
  1. 仿真结果:
    image
posted @ 2022-08-12 20:06  相对维度  阅读(970)  评论(1)    收藏  举报