matlab求解黎卡提代数方程_LQR

三种方法求解:

方法一:迭代求解代码——保存文件名“mylqr”。

%% 利用MATLAB求解黎卡提代数方程
% 方法一:简单代数迭代法
% 令fai_0=0,则可以写出如下的迭代公式。
% fai_(i+1)=E'*fai_i*E-(E'*fai_i*G+W)*(G'*fai_i*G+H)^(-1)*(E'*fai_i*G+W+Q);
% E=(I-A)^(-1)*(I+A);
% G=2*(I-A)^(-1)*B;
% H=R+B'*(I-A')^(-1)*Q*(I-A)^(-1)*B;
% W=Q*(I-A)^(-1)*B; 
% 如果fai_(i+1)收敛于一个常数矩阵,即||fai_(i+1)-fai_i||<kesai,则可得黎卡提代数方程解为:
% P=2*(I-A')^(-1)*fai_(i+1)*(I-A)^(-1);
%% MATLAB代码实现
%%%%%%%%%%%%%matlab程序%%%%%%%%%%%%%%
I=eye(size(A));
iA=inv(I-A);%iA=(I-A)^(-1);
E=iA*(I+A);
G=2*iA^2*B;
H=R+B'*iA'*Q*iA*B;
W=Q*iA*B;
P0=zeros(size(A));
i=0;
while(1)
    i=i+1;
    P=E'*P0*E-(E'*P0*G+W)*inv(G'*P0*G+H)*(E'*P0*G+W)'+Q;
    if (norm(P-P0)<eps)
        break;
    else
        P0=P;
    end
end
P=2*iA'*P*iA;
%%%%%%*************************

方法二:matlab工具箱

[K,P,E]=lqr(A,B,Q,R)

方法三:

[P,E,K,RR]=care(A,B,Q,R,zeros(size(B)),eye(size(A)))
% % 如果设置了P的终值条件,则只能使用方法三care(),
% % 假设终值【0.2;0.2】,则:
% [P,E,K,RR]=care(A,B,Q,R,[0.2;0.2],eye(size(A)))

测试验证:——新建.m文件。

clear,clc;
A=[0 1;-5 -3];
B=[0;1];
Q=[500 200;200 100];
R=1.6667;
% %% 方法一:
mylqr
K=inv(R)*B'*P
P
E
% %% 方法二
% [K,P,E]=lqr(A,B,Q,R)
% %% 方法三
% [P,E,K,RR]=care(A,B,Q,R,zeros(size(B)),eye(size(A)))
% % 如果设置了P的终值条件,则只能使用方法三care(),
% % 假设终值【0.2;0.2】,则:
% [P,E,K,RR]=care(A,B,Q,R,[0.2;0.2],eye(size(A)))

改进后(XXXX):

clear;clc;
A=[0 1;-5 -3];
B=[0;1];
Q=[500 200;200 100];
R=1.6667;
% %% 方法一:
% mylqr
P = diedai(A,B,Q,R);
K=R^(-1)*B'*P
P
% %% 方法二
% [K,P,E]=lqr(A,B,Q,R)
% %% 方法三
% [P,E,K,RR]=care(A,B,Q,R,zeros(size(B)),eye(size(A)))
% % 如果设置了P的终值条件,则只能使用方法三care(),
% % 假设终值【0.2;0.2】,则:
% [P,E,K,RR]=care(A,B,Q,R,[0.2;0.2],eye(size(A)))

%% 方法一,迭代求解
function P = diedai(A,B,Q,R)
%% MATLAB代码实现
%%%%%%%%%%%%%matlab程序%%%%%%%%%%%%%%
epslion = 1e-10;%或者epslion = eps;
I=eye(size(A));
%iA=inv(I-A);
iA=(I-A)^(-1);  %inv(X)矩阵的逆矩阵
E=iA*(I+A);
G=2*iA*B;
H=R+B'*iA'*Q*iA*B;
W=Q*iA*B;
P0=zeros(size(A));%预先产生空矩阵
while(1)
    P=E'*P0*E-(E'*P0*G+W)*(G'*P0*G+H)^(-1)*(E'*P0*G+W)'+Q;
    if (norm(P-P0) < epslion)
        break;
    else
        P0=P;
    end
end
P=2*iA'*P*iA;

%%%%%%%%%%*************************
%% 利用MATLAB求解黎卡提代数方程
% 方法一:简单代数迭代法
% 令fai_0=0,则可以写出如下的迭代公式。
% fai_(i+1)=E'*fai_i*E-(E'*fai_i*G+W)*(G'*fai_i*G+H)^(-1)*(E'*fai_i*G+W+Q);
% E=(I-A)^(-1)*(I+A);
% G=2*(I-A)^(-1)*B;
% H=R+B'*(I-A')^(-1)*Q*(I-A)^(-1)*B;
% W=Q*(I-A)^(-1)*B; 
% 如果fai_(i+1)收敛于一个常数矩阵,即||fai_(i+1)-fai_i||<kesai,则可得黎卡提代数方程解为:
% P=2*(I-A')^(-1)*fai_(i+1)*(I-A)^(-1);
end

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中可以使用迭代方法求解LQR控制器的加权系数。首先,可以定义适应度函数的变量范围。然后,利用遗传算法产生初始种群,并根据每个个体的加权系数计算最优控制反馈增益矩阵和最优控制力,并应用于单轮模型以得到悬架的性能指标。接着,根据适应度函数的定义计算种群中各个体的适应度函数值,并判断是否满足遗传算法的终止条件。如果满足,则退出遗传算法,得到最优个体;如果不满足,则进行选择、保留精英、交叉、变异等操作,产生新的种群并重复以上步骤,直到满足终止条件为止。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [matlab求解黎卡提代数方程_LQR](https://blog.csdn.net/m0_62299908/article/details/127807014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于遗传算法的LQR控制器优化设计(matlab实现)](https://blog.csdn.net/weixin_44209907/article/details/130868692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值