多种控制率算法的实现案例(LQR、H无穷和神经网络算法等)(Matlab代码实现)

 💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

多种控制率算法的实现案例(LQR、H无穷和神经网络算法等)研究文档

一、概述

二、LQR 算法实现案例

(一)LQR 算法原理

(二)结果分析

三、H 无穷算法实现案例

(一)H 无穷算法原理

(二)结果分析

四、神经网络算法实现案例

(一)神经网络算法原理

(二)结果分析

五、结论

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

  环形转子由叶轮 、轴承、永磁体 、导磁环 、衔铁和永磁体保持架组成 ,环形定子由外 筒、内环和线圈组成。其 中,环形转 子的磁极(衔铁 )与环形定子的极靴相对应且 同轴 ,而转子的叶轮暴露在引信体的外表面以将弹丸飞行时所产生 的气动能转换 为转 子转动 的机 械能。这样 ,弹丸飞行时所产生的气动能就驱动发电机转子的叶轮带动发电机的转子转动 ,形成变化的旋转磁场 ,从而导致发电机的电枢中产生感应 电动势 。

多种控制率算法的实现案例(LQR、H无穷和神经网络算法等)研究文档

一、概述

在控制领域中,不同的控制率算法适用于各种不同的系统和应用场景。本文将深入探讨 LQR(线性二次型调节器)、H 无穷和神经网络算法在实际案例中的实现,并给出相应的 Matlab 代码示例。首先介绍一个涉及环形发电机结构的案例背景,环形转子由叶轮、轴承、永磁体、导磁环、衔铁和永磁体保持架组成,环形定子由外筒、内环和线圈组成。环形转子的磁极(衔铁)与环形定子的极靴相对应且同轴,转子的叶轮暴露在引信体的外表面,可将弹丸飞行时所产生的气动能转换为转子转动的机械能,进而驱动发电机转子转动,产生感应电动势。在此基础上,以下将详细介绍不同算法的实现案例。

二、LQR 算法实现案例

(一)LQR 算法原理

(二)结果分析

通过上述代码实现 LQR 控制后,我们可以观察系统状态变量随时间的响应曲线。根据加权矩阵 QQ 和 RR 的不同取值,系统的响应速度、稳定性和控制能量消耗等性能会有所变化。例如,如果增大 QQ 矩阵中对应某个状态变量的元素值,那么系统对该状态变量的控制会更加严格,响应速度可能加快,但控制能量消耗也可能增加;而增大 RR 矩阵的元素值,则会使控制输入更加平滑,减少控制能量消耗,但可能会牺牲一定的响应速度。

三、H 无穷算法实现案例

(一)H 无穷算法原理

H 无穷控制的核心思想是在存在外部干扰的情况下,保证系统的闭环传递函数的 H∞H∞​ 范数小于某个给定的正数 γγ,从而使系统对干扰具有一定的抑制能力。它通过求解特定的矩阵不等式来设计控制器,以满足性能要求。

(二)结果分析

通过仿真结果可以看到,在 H 无穷控制器的作用下,系统对外部干扰具有一定的抑制能力。当改变性能指标参数 γγ 时,系统的抗干扰能力和控制器的复杂程度会发生变化。较小的 γγ 值可以使系统对干扰的抑制能力更强,但可能导致控制器设计更加复杂,甚至可能无法找到可行的控制器;而较大的 γγ 值虽然会使控制器设计相对简单,但系统的抗干扰性能会有所下降。

四、神经网络算法实现案例

(一)神经网络算法原理

神经网络是一种模仿人类神经系统的计算模型,由大量的神经元组成。在控制领域中,神经网络可以通过学习系统的输入输出关系,自适应地调整自身参数,以实现对复杂系统的有效控制。常用的神经网络结构包括多层感知机(MLP)、递归神经网络(RNN)及其变体如长短期记忆网络(LSTM)等。

(二)结果分析

通过训练神经网络,我们可以得到一个能够对非线性系统进行较好预测的模型。在实际应用中,将神经网络作为控制器的一部分,可以使系统自适应地调整控制输入,以应对系统的非线性特性。然而,神经网络的性能受到训练数据的质量和数量、网络结构的选择以及训练参数的设置等因素的影响。例如,如果训练数据不足或质量不高,神经网络可能无法准确学习系统的输入输出关系,导致控制性能下降;而不合适的网络结构和训练参数可能会使网络训练陷入局部最优解,无法达到理想的性能。

五、结论

本文详细介绍了 LQR、H 无穷和神经网络算法在不同案例中的实现过程,并给出了相应的 Matlab 代码示例。通过对这些算法的研究和实践,可以看出它们各自具有独特的优势和适用场景。LQR 算法适用于线性系统的最优控制,能够在给定的二次型性能指标下找到最优控制器;H 无穷算法则在存在外部干扰的情况下,为系统提供了一定的抗干扰能力;神经网络算法凭借其强大的非线性逼近能力,能够处理复杂的非线性系统。在实际工程应用中,需要根据具体的系统特性和控制要求,合理选择和应用这些算法,以实现高效、稳定的控制效果。

📚2 运行结果

2.1 利用PID来控制低压转速回路

2.2 将DRNC用于发动机转子转速的控制:

部分代码:

%将DRNC用于发动机转子转速的控制
%考虑双输入双输出
%Author:Taylon
%------------------------------------------------------------
clearvars;clc;

ALR=readfis('LR_engine2');

A=[-2.01 2.06;-0.0044 -2.92];
B=[0.84 1.2;0.53 0.28];
C=[1 0;-0.86 5.08];
D=[0 0;-0.21 0.56];
engine=ss(A,B,C,D);
Ts=0.04;
engineD=c2d(engine,Ts);
%step(engine,'-',engineD,'--')

%初始化控制对象
%ts=0.001;   %采样步长
L=500;     %仿真时长
r=zeros(L,1);
yr=zeros(L,1);
y=zeros(L,1);
u=zeros(L,1);
ec=zeros(L,1);
em=zeros(L,1);
yu=zeros(L,1);
ym=zeros(L,1);
alpha=0;  %动量系数
etaC=0.2;   %学习率
etaI=0.4;
%maxS=2;     %灵敏度最大值

%初始化DRNC(控制器)
Nc=6;pc=3;qc=1;
wc_in1=zeros(Nc,L);wc_in1(:,1)=0.1*ones(Nc,1);
wc_in2=zeros(Nc,L);wc_in2(:,1)=0.1*ones(Nc,1);
wc_in3=zeros(Nc,L);wc_in3(:,1)=0.1*ones(Nc,1);
wc_r=zeros(Nc,L);wc_r(:,1)=0.1*ones(Nc,1);
wc_out=zeros(Nc,L);wc_out(:,1)=0.1*ones(Nc,1);
Sc=zeros(Nc,L);diffSc=zeros(Nc,L);
Hc=zeros(Nc,L);
bhc=zeros(Nc,L);
boc=0.1*ones(1,L);
%权值的分配:[p*N N N q*N],一共分为6个部分
gradWc=0.01*ones((pc+qc+2)*Nc,L);
deltaWc=0.01*ones((pc+qc+2)*Nc,L);
gradBoc=0.01*ones(1,L);
deltaBoc=0.2*ones(1,L);
etac=0.08*ones(6,L);
p1c=Nc;p2c=2*Nc;
p3c=3*Nc;p4c=4*Nc;p5c=5*Nc;
Pc=zeros(Nc,L);
Q1c=zeros(Nc,L);Q2c=zeros(Nc,L);Q3c=zeros(Nc,L);


%初始化DRNI(识别器)
Ni=4;pi=2;qi=1;
wi_in1=zeros(Ni,L);wi_in1(:,1)=0.1*ones(Ni,1);
wi_in2=zeros(Ni,L);wi_in2(:,1)=0.1*ones(Ni,1);
wi_r=zeros(Ni,L);wi_r(:,1)=0.1*ones(Ni,1);
wi_out=zeros(Ni,L);wi_out(:,1)=0.1*ones(Ni,1);
Si=0.1*ones(Ni,L);diffSi=0.1*ones(Ni,L);
Hi=zeros(Ni,L);
bi=0.1*ones(Ni,L);
%权值的分配:[p*N N N q*N],一共分为5个部分
gradWi=zeros((pi+qi+2)*Ni,L);
deltaWi=zeros((pi+qi+2)*Ni,L);
etai=zeros(5,L);
p1i=Ni;p2i=2*Ni;
p3i=3*Ni;p4i=4*Ni;
Pi=zeros(Ni,L);
Q1i=zeros(Ni,L);Q2i=zeros(Ni,L);

PITr=[ones(L/2,1);zeros(L/2,1)];     %目标转速
nL=zeros(L,1);      %实际低压转速
PIT=zeros(L,1);      %实际高压转速
wf=zeros(L,1);      %燃油量

%仿真开始
for k=2:1:L
    %控制对象更新
    r(k)=PITr(k);
    yr(k)=PITr(k);
    
    xk=engineD.A*[nL(k-1);PIT(k-1)]+engineD.B*[wf(k);0];
    yk=engineD.C*[nL(k-1);PIT(k-1)]+engineD.D*[wf(k);0];
    nL(k)=xk(1);PIT(k)=xk(2);
    y(k)=PIT(k);u(k)=wf(k);
    
    %DRNC更新
    Hc(:,k)=wc_in1(:,k-1)*r(k)+wc_in2(:,k-1)*u(k-1)+wc_in3(:,k-1)*y(k-1)+wc_r(:,k-1).*Sc(:,k-1)+bhc(:,k-1);
    Sc(:,k)=Acfun(Hc(:,k));
    u(k)=(wc_out(:,k-1))'*Sc(:,k)+boc(k);
    wf(k+1)=u(k);
    
    %DRNI更新
    Hi(:,k)=wi_in1(:,k-1)*u(k)+wi_in2(:,k-1)*y(k-1)+wi_r(:,k-1).*Si(:,k-1)+bi(:,k-1);
    Si(:,k)=Acfun(Hi(:,k));
    ym(k)=(wi_out(:,k-1))'*Si(:,k);
    
    ec(k)=yr(k)-y(k);
    em(k)=y(k)-ym(k);
    %反馈阶段
    %求取灵敏度yu(k)
    yu(k)=wi_out(:,k-1)'*((1-Si(:,k).^2).*wi_in1(:,k-1));

    
    %计算DRNC权值梯度
    gradWc(p5c+1:end,k)=ec(k)*yu(k)*Sc(:,k);     %输出权值梯度
    diffSc(:,k)=diffAcfun(Hc(:,k));
    gradWc(p4c+1:p5c,k)=ec(k)*yu(k)*wc_out(:,k-1).*diffSc(:,k);   %隐含层偏置梯度
    Pc(:,k)=diffSc(:,k).*(Sc(:,k-1)+wc_r(:,k-1).*Pc(:,k-1));
    gradWc(p3c+1:p4c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Pc(:,k);       %循环权值梯度
    Q3c(:,k)=diffSc(:,k).*(y(k-1)+wc_r(:,k-1).*Q3c(:,k-1));
    gradWc(p2c+1:p3c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q3c(:,k);       %第三个输入权值梯度
    Q2c(:,k)=diffSc(:,k).*(u(k-1)+wc_r(:,k-1).*Q2c(:,k-1));
    gradWc(p1c+1:p2c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q2c(:,k);       %第二个输入权值梯度
    Q1c(:,k)=diffSc(:,k).*(r(k)+wc_r(:,k-1).*Q1c(:,k-1)); 
    gradWc(1:p1c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q1c(:,k);       %第一个输入权值梯度
    gradBoc(k)=ec(k)*yu(k);
    %计算DRNC自适应学习率
    etac(6,k)=evalfis([abs(ec(k)) max(abs(gradWc(p5c+1:end,k)))],ALR);
    etac(5,k)=evalfis([abs(ec(k)) max(abs(gradWc(p4c+1:p5c,k)))],ALR);
    etac(4,k)=evalfis([abs(ec(k)) max(abs(gradWc(p3c+1:p4c,k)))],ALR);
    etac(3,k)=evalfis([abs(ec(k)) max(abs(gradWc(p2c+1:p3c,k)))],ALR);
    etac(2,k)=evalfis([abs(ec(k)) max(abs(gradWc(p1c+1:p2c,k)))],ALR);
    etac(1,k)=evalfis([abs(ec(k)) max(abs(gradWc(1:p1c,k)))],ALR);
    %etac(:,k)=etaC*(2*ec(k))^2;

    %计算权值变化量
    deltaWc(p5c+1:end,k)=etac(6,k)*gradWc(p5c+1:end,k);
    deltaWc(p4c+1:p5c,k)=etac(5,k)*gradWc(p4c+1:p5c,k);
    deltaWc(p3c+1:p4c,k)=etac(4,k)*gradWc(p3c+1:p4c,k);
    deltaWc(p2c+1:p3c,k)=etac(3,k)*gradWc(p2c+1:p3c,k);
    deltaWc(p1c+1:p2c,k)=etac(2,k)*gradWc(p1c+1:p2c,k);
    deltaWc(1:p1c,k)=etac(1,k)*gradWc(1:p1c,k);
    deltaBoc(k)=etac(6,k)*gradBoc(k);
    
    %权值更新
    wc_out(:,k)=wc_out(:,k-1)+deltaWc(p5c+1:end,k);
    bhc(:,k)=bhc(:,k-1)+deltaWc(p4c+1:p5c,k);
    wc_r(:,k)=wc_r(:,k-1)+deltaWc(p3c+1:p4c,k);
    wc_in3(:,k)=wc_in3(:,k-1)+deltaWc(p2c+1:p3c,k);
    wc_in2(:,k)=wc_in2(:,k-1)+deltaWc(p1c+1:p2c,k);
    wc_in1(:,k)=wc_in1(:,k-1)+deltaWc(1:p1c,k);
    boc(k)=boc(k-1)+deltaBoc(k);
    
    %计算DRNI权值梯度
    gradWi(p4i+1:end,k)=em(k)*Si(:,k);     %输出权值梯度
    diffSi(:,k)=diffAcfun(Hi(:,k));
    gradWi(p3i+1:p4i,k)=em(k)*wi_out(:,k-1).*diffSi(:,k);   %隐含层偏置梯度
    Pi(:,k)=diffSi(:,k).*(Si(:,k-1)+wi_r(:,k-1).*Pi(:,k-1));
    gradWi(p2i+1:p3i,k)=em(k)*wi_out(:,k-1).*Pi(:,k);       %循环权值梯度
    Q2i(:,k)=diffSi(:,k).*(y(k-1)+wi_r(:,k-1).*Q2i(:,k-1));
    gradWi(p1i+1:p2i,k)=em(k)*wi_out(:,k-1).*Q2i(:,k);       %第二个输入权值梯度
    Q1i(:,k)=diffSi(:,k).*(u(k)+wi_r(:,k-1).*Q1i(:,k-1)); 
    gradWi(1:p1i,k)=em(k)*wi_out(:,k-1).*Q1i(:,k);       %第一个输入权值梯度
    %计算DRNI自适应学习率
%     etai(5,k)=1./max(gradWi(p4i+1:end,k).^2);
%     etai(4,k)=1./max(gradWi(p3i+1:p4i,k).^2);
%     etai(3,k)=1./max(gradWi(p2i+1:p3i,k).^2);
%     etai(2,k)=1./max(gradWi(p1i+1:p2i,k).^2);
%     etai(1,k)=1./max(gradWi(1:p1i,k).^2);
    etai(:,k)=etaI;
    %计算权值变化量
    deltaWi(p4i+1:end,k)=etai(5,k)*gradWi(p4i+1:end,k)+alpha*deltaWi(p4i+1:end,k-1);
    deltaWi(p3i+1:p4i,k)=etai(4,k)*gradWi(p3i+1:p4i,k)+alpha*deltaWi(p3i+1:p4i,k-1);
    deltaWi(p2i+1:p3i,k)=etai(3,k)*gradWi(p2i+1:p3i,k)+alpha*deltaWi(p2i+1:p3i,k-1);
    deltaWi(p1i+1:p2i,k)=etai(2,k)*gradWi(p1i+1:p2i,k)+alpha*deltaWi(p1i+1:p2i,k-1);
    deltaWi(1:p1i,k)=etai(1,k)*gradWi(1:p1i,k)+alpha*deltaWi(1:p1i,k-1);
    
    %权值更新
    wi_out(:,k)=wi_out(:,k-1)+deltaWi(p4i+1:end,k);
    bi(:,k)=bi(:,k-1)+deltaWi(p3i+1:p4i,k);
    wi_r(:,k)=wi_r(:,k-1)+deltaWi(p2i+1:p3i,k);
    wi_in2(:,k)=wi_in2(:,k-1)+deltaWi(p1i+1:p2i,k);
    wi_in1(:,k)=wi_in1(:,k-1)+deltaWi(1:p1i,k);
end

%展示
kk=1:L;
P1=figure(1);
set(P1,'position',[200 400 800 600]);
plot(kk,y,'b--',kk,yr,'k-',kk,ym,'r:');
legend('实际输出','目标输出','识别输出');

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

[1]王劲松,林明耀,钱元成.微型稳速无刷直流电动机结构和控制分析[J].微特电机,2004(08):11-13.

🌈4 Matlab代码实现

要在CentOS 7中的单用户模式修改密码,您可以按照以下步骤操作: 1. 首先,重启系统并进入GRUB引导菜单。您可以按下计算机的电源按钮并立即按下并持续按住Shift键,直到出现GRUB菜单为止。 2. 使用方向键选择第一个启动项,并按下e键进行编辑。 3. 找到以"linux16"开头的那一行,然后去掉其中的"rhgb"和"quiet"参数。在"UTF-8"之后添加"init=/bin/sh"参数。这将让系统在单用户模式下启动并进入一个shell提示符。 4. 按下Ctrl + x键启动修改。 5. 您现在将进入一个单用户模式的shell提示符。输入以下命令以重新挂载根文件系统为可写模式: ``` mount -o remount,rw / ``` 6. 输入以下命令以更改root用户的密码: ``` passwd ``` 7. 按照提示输入新密码并确认。 8. 输入以下命令以重新挂载根文件系统为只读模式: ``` mount -o remount,ro / ``` 9. 输入以下命令以重启系统: ``` reboot ``` 10. 系统将重新启动并返回到正常的登录界面。 请注意,这些步骤将使您能够在CentOS 7中的单用户模式修改root用户的密码。确保您按照指示操作,并确保保护好您的密码以确保系统的安全性。 [参考文献] 提供了在GRUB引导菜单中编辑启动项的具体步骤。 提供了在单用户模式下重新挂载根文件系统为可写模式和只读模式的命令。 提供了在系统中使用命令"reboot"来重启系统的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值