clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
xite=0.50;
alfa=0.05;
IN=4; H=5; Out=3;
ts=0.01;
%结合粒子群数值优化算法的神经网络权重初始化矩阵
wi=[
-4.7730 5.0000 4.8238 -4.7085
4.9337 4.8659 -4.9651 -4.8618
4.9470 4.9485 -4.6965 4.8327
5.0000 4.9508 4.5696 4.9154
4.6047 -4.7804 5.0000 -4.7332
];
wo=[
4.9438 -4.6610 4.9293 4.7416 -4.9323
5.0000 4.9414 4.0693 -4.7460 5.0000
-4.9147 4.8119 4.9292 4.9434 4.9398
];
%[wi , wo]=SPO_InitW();
wi_init_save=wi; wo_init_save=wo;
wo_1=wo; wo_2=wo;
wi_1=wi; wi_2=wi;
%M=[10,1,10];
%激活函数系数
M=[9.9,9.8,9.4];
x=[0,0,0];
du_1=0;
u_1=0; u_2=0; u_3=0; u_4=0; u_5=0;u_6=0;u_7=0;
y_1=0; y_2=0; y_3=0;
error_1=0; error_2=0;
Oh=zeros(H,1);
I=Oh;
sys=tf(400,[1,50,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
for k=1:1:200
time(k)=k*ts;
rin(k)=1.0;
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
error(k)=rin(k)-yout(k);
X(1)=error(k)-error_1;
X(2)=error(k);
X(3)=error(k)-2*error_1+error_2;
xii=[X(1),X(2),X(3),1];
xi=xii/norm(xii);
epid=[X(1);X(2);X(3)];
%%%前向传播----------------------------------------
net2=xi*(wi');
for j=1:1:H
Oh(j)=( exp( net2(j)-exp(-net2(j)) ) )/(exp( net2(j)+exp(-net2(j)) ));
end
net3=wo*Oh;
for l=1:1:Out
K(l)=exp(net3(l))/(exp(net3(l))+exp(-net3(l)));
%K(l)=M*net3(l);
end
kp(k)=M(1)*K(1); ki(k)=M(2)*K(2); kd(k)=M(3)*K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
if u(k)>10
u(k)=10;
end
if u(k)<-10
u(k)=-10;
end
%%%后向传播------------------------------------------------
dyu(k)=sign((yout(k)-y_1)/(du(k)-du_1+0.0001));
for j=1:1:Out
dK(j)=1/(exp(net3(j))+exp(-net3(j)));
%dK(j)=M;
end
for l=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end
for l=1:1:Out
for i=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
for i=1:1:H
dO(i)=4/(exp(net2(i))+exp(-net2(i)))^2;
end
segma=delta3*wo;
for i=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
wo_2=wo_1; wo_1=wo;
wi_2=wi_1; wi_1=wi;
du_1=du(k);
u_7=u_6;u_6=u_5;u_5=u_4; u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_2=y_1; y_1=yout(k);
error_2=error_1; error_1=error(k);
end
figure;
[t,y]=BPNN_PID();
plot(t,y,'g','Linewidth',2);
hold on;
plot(time,rin,'r','Linewidth',2);
xlabel('t/s'); ylabel('rin,yout');
hold on ;
plot(time,yout,'c','Linewidth',2);
hold on;
[x,y]=classic_PID();
plot(x,y,'b','Linewidth',2);
%-----------------
figure;
plot(time,error,'r','Linewidth',2);
xlabel('t/s'); ylabel('error');
figure;
plot(time,u,'r','Linewidth',2);
xlabel('t/s'); ylabel('u');
figure;
subplot(311);
plot(time,kp,'r','Linewidth',2);
xlabel('t/s'); ylabel('kp');
subplot(312);
plot(time,ki,'g','Linewidth',2);
xlabel('t/s'); ylabel('ki');
subplot(313);
plot(time,kd,'b','Linewidth',2);
xlabel('t/s'); ylabel('kd');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,包含仿真操作录像,操作录像使用windows media player播放。 2.领域:自适应PID控制器 3.内容:基于PSO-BP网络优化的自适应PID控制器matlab仿真 4.运行注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。 5.适用人群:本硕博等科研学习参考使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于PSO-BP网络优化的自适应PID控制器matlab仿真.rar (10个子文件)
基于PSO-BP网络优化的自适应PID控制器matlab仿真
matlab
func
BPNN_Fitness.m 2KB
BPNN_PID.m 3KB
PSO_InitW.m 3KB
classic_PID.m 935B
Runme.m 3KB
11.jpg 13KB
22.jpg 10KB
54.jpg 27KB
操作录像0038.avi 7.32MB
44.jpg 18KB
共 10 条
- 1
fpga和matlab
- 粉丝: 17w+
- 资源: 2620
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页