EDA365电子论坛网

标题: matlab仿真模型 [打印本页]

作者: zaiyiaaaa    时间: 2020-9-18 15:50
标题: matlab仿真模型
BP神经网络整定的PID控制算法matlab源程序,系统为二阶闭环系统。

+ J: O5 N3 Y! R! L
%BP based PID Control
clear all;
close all;

6 r9 k, ?" T; Y# d6 c; y' O
xite=0.28;
alfa=0.001;
0 [( V- R1 Z/ R. h
3 C$ r* o4 k% ]! B. S( J
IN=4;H=5;Out=3;  %NN Structure
6 D) e/ f/ V1 f; r/ H7 p
5 L" k% u+ Q" T
wi=0.50*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;

3 s" Y  Z# t8 F6 J
  {7 c0 ?0 O  k  K' n( h' @5 R; L" J
wo=0.50*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
( S, K6 s. m$ d9 j5 ~

  s" ?( |- Y$ @' K' A% k9 j2 L1 |! [
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;

- w, G! q8 K: |$ V: d
Oh=zeros(H,1);    %Output from NN middle layer
I=Oh;             %Input to NN middle layer
error_2=0;
error_1=0;

2 S9 a( O$ |) k5 \  `" x3 N) C
ts=0.01;
sys=tf(2.6126,[1,3.201,2.7225]);  %建立被控对象传递函数
dsys=c2d(sys,ts,'z');   %把传递函数离散化
[num,den]=tfdata(dsys,'v');  %离散化后提取分子、分母
for k=1:1:2000
time(k)=k*ts;
rin(k)=40;
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_2+num(3)*u_3;%这一步是怎么推的(问题1
error(k)=rin(k)-yout(k);

9 r- Z! S- i% [3 t( t
xi=[rin(k),yout(k),error(k),1];
( X* k2 z) `! S; @: L5 ^
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;

  m; q' i) q: D, j
epid=[x(1);x(2);x(3)];
I=xi*wi';
for j=1:1:H
   Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j))); %Middle Layer
end
K=wo*Oh;             %Output Layer
for l=1:1:Out
   K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));        %Getting kp,ki,kd
end
kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
Kpid=[kp(k),ki(k),kd(k)];
- t( @7 h# @6 g8 f5 u* f
du(k)=Kpid*epid;
u(k)=u_1+du(k);
if u(k)>=45       % Restricting the output of controller
  u(k)=45;
end
if u(k)<=-45
   u(k)=-45;
end

& J% x3 N: W! y# r) V; d$ R, \
dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001));
8 p" M1 N( F$ l$ H
%Output layer
for j=1:1:Out
   dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
for l=1:1:Out
   delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end

6 w5 p9 K4 Y( |5 i1 c
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);%这一步似乎有问题(问题2
%Hidden layer
for i=1:1:H
   dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
end
   segma=delta3*wo;
for i=1:1:H
  delta2(i)=dO(i)*segma(i);
end
" ^4 @  J$ l" B1 ?) G4 ]) x
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
+ i; N% L7 F' K" ^7 \7 x; Z. p6 K
%Parameters Update
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);
   
wo_3=wo_2;
wo_2=wo_1;
wo_1=wo;
   
wi_3=wi_2;
wi_2=wi_1;
wi_1=wi;

+ Q4 d/ h& u* {/ _
error_2=error_1;
error_1=error(k);
end
figure(1);
plot(time,rin,'r',time,yout,'b');
xlabel('time(s)');ylabel('rin,yout');
figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
subplot(311);
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp');
subplot(312);
plot(time,ki,'g');
xlabel('time(s)');ylabel('ki');
subplot(313);
plot(time,kd,'b');
xlabel('time(s)');ylabel('kd');
问题(1)和问题(2)都标注出来了。还请各位帮忙看一下,尤其是问题(1),到底如何将已知的传递函数转换成,matlab的仿真模型呢
9 F- H+ f  ]' x4 I5 B$ A

作者: zzz.dan    时间: 2020-9-18 17:44
帮你顶一下
作者: kekek    时间: 2020-9-18 17:53
差分方程你值得拥有
1 h, ^' p8 ^+ p; e3 ^& b1 W( t1 f' q( V% z
作者: Uifhjvv    时间: 2020-9-18 17:55
二楼正解!你试试差分方程
作者: pTDbn25    时间: 2020-9-22 14:06
来学习一下




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2