声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1472|回复: 1

[综合讨论] 【求助】神经网络调整PID的程序错误!(已解决)

[复制链接]
发表于 2009-6-12 10:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 牛小贱 于 2014-3-10 21:32 编辑

我这个程序是刘金琨老师那本书上抄下来的,但是我运行的时候有错,是神经网络调整PID的程序,哪位好心的朋友帮我看看到底错在哪里?程序如下:
  1. clear all;
  2. close all;

  3. xite=0.25;
  4. alfa=0.05;
  5. belte=0.01;
  6. x=[0,0,0]';

  7. ci=30*ones(3,6);
  8. bi=40*ones(6,1)';
  9. w=10*ones(6,1);
  10. h=[0,0,0,0,0,0,0]';

  11. ci_1=ci;ci_2=ci_1;ci_3=ci_2;
  12. bi_1=bi;bi_2=bi_1;bi_3=bi_2;
  13. w_1=w;w_2=w_1;w_3=w_2;

  14. u_1=0;y_1=0;
  15. xc=[0,0,0]';
  16. e_1=0;e_2=0;e=0;

  17. kp0=0.03;
  18. ki0=0.01;
  19. kd0=0.03;

  20. kp_1=kp0;
  21. ki_1=ki0;
  22. kd_1=kd0;

  23. xitekp=0.2;
  24. xiteki=0.2;
  25. xitekd=0.2;

  26. ts=0.001;
  27. for k=1:1:2000
  28.     time(k)=k*ts;
  29.     r(k)=1.0*sign(sin(2*pi*k*ts));
  30.     y(k)=(-0.1*y_1+u_1)/(1+y_1^2);
  31.     for j=1:1:6
  32.         h(j)=exp(-norm(x-ci(:,j))^2/(2*bi(j)^2));
  33.     end
  34.     ym(k)=w'*h;
  35.    
  36.     d_w=0*w;
  37.     for j=1:1:6
  38.         d_w(j)=xite*(y(k)-ym(k))*h(j);
  39.     end
  40.     w=w_1+d_w+alfa*(w_1-w_2)+belte*(w_2-w_3);
  41.    
  42.     d_bi=0*bi;
  43.     for j=1:1:6
  44.         d_bi(j)=xite*(y(k)-ym(k))*w(j)*h(j)/(bi(j)^3)*norm(x-ci(:,j))^2;
  45.     end
  46.     bi=bi_1+d_bi+alfa*(bi_1-bi_2)+belte*(bi_2-bi_3);
  47.    
  48.     for j=1:1:6
  49.         for i=1:1:3
  50.             d_ci(i,j)=xite*(y(k)-ym(k))*w(j)*h(j)*(x(i)-ci(i,j))/(bi(j)^2);
  51.         end
  52.     end
  53.     ci=ci_1+d_ci+alfa*(ci_1-ci_2)+belte*(ci_2-ci_3);
  54.    
  55.     yu=0;
  56.     for j=1:1:6
  57.         yu=yu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2
  58.     end
  59.     dy(k)=yu;
  60.    
  61.     e(k)=r(k)-y(k);
  62.     kp(k)=kp_1+xitekp*e(k)*dy(k)*xc(1);
  63.     kd(k)=kd_1+xitekd*e(k)*dy(k)*xc(2);
  64.     ki(k)=ki_1+xiteki*e(k)*dy(k)*xc(3);
  65.     if kp(k)<0
  66.         kp(k)=0;
  67.     end
  68.     if kd(k)<0
  69.         kd(k)=0;
  70.     end
  71.     if ki(k)<0
  72.         ki(k)=0;
  73.     end
  74.    
  75.     M=1;
  76.     switch M
  77.         case 1
  78.         case 2
  79.             kp(k)=kp0;
  80.             ki(k)=ki0;
  81.             kd(k)=kd0;
  82.     end
  83.     du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3);
  84.     u(k)=u_1+du(k);
  85.    
  86.     x(1)=du(k);
  87.     x(2)=y(k);
  88.     x(3)=y_1;
  89.    
  90.     u_1=u(k);
  91.     y_1=y(k);
  92.    
  93.     ci_3=ci_2;
  94.     ci_2=ci_1;
  95.     ci_1=ci;
  96.    
  97.     bi_3=bi_2;
  98.     bi_2=bi_1;
  99.     bi_1=bi;
  100.    
  101.     w_3=w_2;
  102.     w_2=w_1;
  103.     w_1=w;
  104.    
  105.     xc(1)=e(k)-e_1;
  106.     xc(2)=e(k)-2*e_1+e_2;
  107.     xc(3)=e(k);
  108.    
  109.     e_2=e_1;
  110.     e_1=e(k);
  111.    
  112.     kp_1=kp(k);
  113.     kd_1=kd(k);
  114.     ki_1=ki(k);
  115. end   
  116. figure(1);
  117. plot(time,r,'b',time,y,'r');
  118. xlabel('time(s)');ylabel('r,y');

  119. figure(2);
  120. plot(time,y,'r',time,ym,'b');
  121. xlabel('time(s)');ylabel('y,ym');

  122. figure(3);
  123. plot(time,dy);
  124. xlabel('time(s)');ylabel('Jacobian Value');

  125. figure(4);
  126. subplot(311);
  127. plot(time,kp,'r');
  128. xlabel('time(s)');ylabel('kp');
  129. subplot(312);
  130. plot(time,ki,'r');
  131. xlabel('time(s)');ylabel('ki');
  132. subplot(313);
  133. plot(time,kd,'r');
  134. xlabel('time(s)');ylabel('kd');   
复制代码


Untitled2.m

2.56 KB, 下载次数: 1

回复
分享到:

使用道具 举报

 楼主| 发表于 2009-6-12 10:38 | 显示全部楼层

我找到错误了

我找到错误了,真是糊涂虫,打错字了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 23:28 , Processed in 0.105963 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表