模糊神经网络PID控制的一个例子
主要是利用输入和输出的限制,得到PID三个参数,然后进行PID系统的控制
%Fuzzy Tunning PID Control
clear all;
close all;a=newfis('fuzzpid'); %新建模糊推理系统a=addvar(a,'input','e',[-3,3]); %Parameter e 添加模糊语言变量
a=addmf(a,'input',1,'NB','zmf',[-3,-1]);
a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]); %添加
a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);
a=addmf(a,'input',1,'Z','trimf',[-2,0,2]); % 三角形的隶属函数
a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',1,'PM','trimf',[0,2,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %Parameter ec
a=addmf(a,'input',2,'NB','zmf',[-3,-1]);
a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);
a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);
a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);
a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',2,'PM','trimf',[0,2,3]);
a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %Parameter kp
a=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);
a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);
a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);
a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);
a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);
a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);
a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %Parameter ki
a=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);
a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);
a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]);
a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);
a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);
a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);
a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %Parameter kp
a=addmf(a,'output',3,'NB','zmf',[-3,-1]);
a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);
a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);
a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);
a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);
a=addmf(a,'output',3,'PM','trimf',[0,2,3]);
a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1;1 2 7 1 3 1 1;1 3 6 2 1 1 1;1 4 6 2 1 1 1;1 5 5 3 1 1 1;1 6 4 4 2 1 1;1 7 4 4 5 1 1;2 1 7 1 5 1 1;2 2 7 1 3 1 1;2 3 6 2 1 1 1;2 4 5 3 2 1 1;2 5 5 3 2 1 1;2 6 4 4 3 1 1;2 7 3 4 4 1 1;3 1 6 1 4 1 1;3 2 6 2 3 1 1;3 3 6 3 2 1 1;3 4 5 3 2 1 1;3 5 4 4 3 1 1;3 6 3 5 3 1 1;3 7 3 5 4 1 1;4 1 6 2 4 1 1;4 2 6 2 3 1 1;4 3 5 3 3 1 1;4 4 4 4 3 1 1;4 5 3 5 3 1 1;4 6 2 6 3 1 1;4 7 2 6 4 1 1;5 1 5 2 4 1 1;5 2 5 3 4 1 1;5 3 4 4 4 1 1;5 4 3 5 4 1 1;5 5 3 5 4 1 1;5 6 2 6 4 1 1;5 7 2 7 4 1 1;6 1 5 4 7 1 1;6 2 4 4 5 1 1;6 3 3 5 5 1 1;6 4 2 5 5 1 1;6 5 2 6 5 1 1;6 6 2 7 5 1 1; 6 7 1 7 7 1 1;7 1 4 4 7 1 1; 7 2 4 4 6 1 1;7 3 2 5 6 1 1;7 4 2 6 6 1 1;7 5 2 6 5 1 1;7 6 1 7 5 1 1;7 7 1 7 7 1 1];a=addrule(a,rulelist); %添加模糊规则函数
a=setfis(a,'DefuzzMethod','centroid'); %设置模糊推理特性
writefis(a,'fuzzpid'); %保存模糊推理系统a=readfis('fuzzpid');%从磁盘读模糊推理系统figure(1);
plotmf(a,'input',1);
figure(2);
plotmf(a,'input',2);
figure(3);
plotmf(a,'output',1);
figure(4);
plotmf(a,'output',2);
figure(5);
plotmf(a,'output',3);
figure(6);
plotfis(a);%图像显示模糊推理系统fuzzy fuzzpid;
showrule(a); %显示模糊规则函数
ruleview fuzzpid;%%
%pid 控制
ts=0.001;
sys=tf([187],[160 1],'inputdelay',117);
dsys=c2d(sys,ts,'tustin');
[num den]=tfdata(dsys,'v');
u_1=0.0;u_2=0.0;u_3=0;
y_1=0;y_2=0;y_3=0;
x=[0 0 0]';
error_1=0;
e_1=0;
ec_1=0;
kp0=0.4;
kd0=1.0;
ki0=0.0;
for k=1:1:1000time(k)=k*ts;rin(k)=1;k_pid=evalfis([e_1 ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);if k==300u(k)=u(k)+1;endif u(k)>=10u(k)=10endif u(k)<=-10u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;error(k)=rin(k)-yout(k);u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;u_2=y_1;y_1=yout(k);x(1)=error(k);x(2)=error(k)-error_1;x(3)=x(3)+error(k);e_1=x(1);ec_1=x(2);error_2=error_1;error_1=error(k);
end
%%
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');
ylabel('rin,yout');
%%
figure(2);plot(time,error,'r');xlabel('time');ylabel('error');figure(3);plot(time,u,'r');xlabel('time');ylabel('u');figure(4);plot(time,kp,'r');xlabel('time');ylabel('kp');figure(5);plot(time,ki,'r');xlabel('time');ylabel('ki');figure(6);plot(time,kd,'r');xlabel('time');ylabel('kd');figure(7);
模糊神经网络PID控制的一个例子相关推荐
- 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
认真 沉稳 进取 认真努力的人都会关注这个公众号 PID控制(比例-积分-微分控制)是一种我们比较常见的控制算法,由比例单元P,积分单元I和微分单元D组成,控制基础为比例控制,积分控制,微分控制. ...
- 基于模糊神经网络PID算法的液位串级控制
由于二阶液位系统具有一定的非线性和时滞性的特点,所以普通PID算法的控制效果并不理想.神经网络有自学习能力和大规模并行处理能力,在认知处理上比较擅长:模糊控制系统能够充分利用学科领域的知识,能以较少的 ...
- 【PID优化】基于matlab粒子群算法优化BP神经网络PID控制【含Matlab源码 2022期】
⛄一.粒子群算法优化BP神经网络PID控制简介 BP神经网络PID控制算法 传统PID控制器作为一种线性控制器,具备结构,容易实现的优点,其基本原理是将系统的实际输出值和期望输出值之间的偏差按照比例. ...
- matlab模糊自适应pid控制仿真程序,模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)...
这个例子的程序百度文库里有很多版本,但我下了很多都有错误,运行不了.以下程序我一字一字的敲出来的,已经成功运行,绝对无误. 仿真实例,被控对象为 p G (s)=s s s 1047035.87523 ...
- 模糊神经网络-PID Smith预估集成控制系统
我们在matlab2021a中建立如下的simulink模型: 对模糊神经网络PID-Smith预估控制(图中简称RBF-FUZZY-PID)和传统的PID控制方法进行比较.被控对象模型中.和=10, ...
- BP神经网络 PID控制simulink仿真
function [sys,x0,str,ts]=my_exppidf(t,x,u,flag) switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSize ...
- 如何在matlab中建立pid神经网络,神经网络PID控制及其Matlab仿真
神经网络P ID 控制及其Ma tlab 仿真 曾 军, 方厚辉 (湖南大学电气与信息工程学院 湖南长沙 410082) 摘 要: 讨论了基于神经网络的P ID 控制, 并将其作用于工业控制, 利用神 ...
- bp神经网络pid控制_文章推荐 | BP神经网络PID控制器在无人机编队飞行中的应用...
中文摘要: 无人机编队飞行可以大幅提高作战效率,因而受到了越来越多的关注.从近距离编队出发,采用长机-僚机编队结构,设计一种基于BP神经网络参数整定的PID控制器,并以双机菱形编队为基础,对其进行仿真 ...
- PID控制及整定算法
转载自 https://www.cnblogs.com/steed/p/7808303.html 一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参 ...
最新文章
- WM6.1 短信模式修改
- SQL Server DBA工作内容详解
- 关于unity的一个不错的插件平台
- 精通C++之前,你必须知道的几件事!
- 2.3.5 操作系统之信号量机制实现进程的互斥、同步与前驱关系
- 关于async与await的FAQ 转
- javascript 刷新技巧
- 买一个二级计算机软件多少钱,计算机二级考试需要买课本吗
- github电脑壁纸_程序员必用的电脑桌面!
- java深入理解深拷贝和浅拷贝的区别 如何实现深拷贝和浅拷贝
- 强烈安利一波,程序猿学习网站
- android 语音唤醒,录音并识别
- mysql报错-ERROR 1206 (HY000)- The total number of locks exceeds the lock table size-的解决方法
- MSF木马的简单利用
- FPGA小钢琴制作(边缘检测的应用)
- 【Redis核心原理和应用实践】应用 7:一毛不拔 —— 漏斗限流
- 解决:Unknown custom element: <> - did you register the component correctly? For recursive compon
- mc正版中国服务器,OurCraft Minecraft 服务器
- 张宇1000题线性代数 第三章 矩阵运算
- 对于大学生来说,如何充分利用云服务器?
热门文章
- VC 在CStatic控件上绘图
- 专家:中国房地产泡沫崩溃时间就是今明二年
- a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
- hdu 5511 Minimum Cut-Cut——分类讨论思想+线段树合并
- Windows MySQL8.0安装出错解决方案(Start Server 失败)
- 手把手教你安装Navicat——靠谱的Navicat安装教程
- springmvc DispatchServlet初始化九大加载策略(一)
- Linux学习笔记——例说makefile 综合案例
- ABAP报表中负值展示问题的处理方法
- yii框架相关知识(转)