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' Oxite=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" Jwo=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: dOh=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) Cts=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( txi=[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, jepid=[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 cfor 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 |