用matlab实现离散LQR调节器,线性二次型调节器LQR/LQC算法解析及求解器代码(matlab)...

参考链接:http://120.52.51.14/stanford.edu/class/ee363/lectures/dlqr.pdf

本文参考讲义中的第20页PPT,根据Hamilton-Jacobi方法,推导得到黎卡提方程的数值迭代求解方法(可实时在线求解黎卡提方程),具体推导过程请参考PPT。本文列出最后的结论及对应的matlab代码,其他编程语言也可参考贴出的代码自行改编。

75ce7388a5af742ee0f100e676ec3945.png

对应的matlab代码如下:

%%%参考文献dlqr

close all

A=[1 1;0 1];

B=[0;1];

C=[1 0];

Q=C'*C;

Qf=C'*C;

R=10*ones(1,1);

[p,L,k] = dare(A,B,Q,R)

x0=[100;10]*1e-2;

N=20;%每一时间步求解器迭代次数,一般20足够,若不收敛,则适当增大该值

P=zeros(2,2,N+1);

P(:,:,N+1)=Qf;

for t=2:(N+1)

tUsed=(N+3-t);

P(:,:,tUsed-1)=Q+A'*P(:,:,tUsed)*A-A'*P(:,:,tUsed)*B/(R+B'*P(:,:,tUsed)*B)*B'*P(:,:,tUsed)*A;

end

s=P(:,:,1)

K=zeros(N,2);

U=zeros(N,1);

X=zeros(N+1,2);

X(1,:)=x0;

for t=1:N

K(t,:)=-(R+B'*P(:,:,t+1)*B)\B'*P(:,:,t+1)*A;

U(t,:)=K(t,:)*X(t,:)';

X(t+1,:)=(A*X(t,:)'+B*U(t,:))';

end

k=K(1,:)

figure (30)

PlotX=1:N;

plot(PlotX,K(:,1),'o-b');

hold on

plot(PlotX,K(:,2),'o-r');

title('反馈系数K')

figure (40)

PlotX=1:N+1;

plot(PlotX,X(:,1),'o-b');

hold on

plot(PlotX,X(:,2),'o-r');

title('状态X')

figure (50)

PlotX=1:N;

plot(PlotX,U(:,1),'o-b');

title('控制输入U')

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值