当前位置:网站首页>【模糊神经网络】基于matlab的模糊神经网络仿真
【模糊神经网络】基于matlab的模糊神经网络仿真
2022-06-28 00:51:00 【fpga和matlab】
1.软件版本
matlab2013b
2.系统概述
·第一个模型:
;![]()
·第二个模型
;
,U=13.012
第一:隶属函数的设计

隶属函数的设计,可以通过模糊编辑器,也可以通过如上的代码进行设计。
第二:模糊规则的设计
通过输入模糊规则量化表进行设计,所得到的模糊规则如下所示:
1. If (e is NB) and (ec is NB) then (u is PB) (1)
2. If (e is NB) and (ec is NM) then (u is PB) (1)
3. If (e is NB) and (ec is NS) then (u is PM) (1)
4. If (e is NB) and (ec is Z) then (u is PM) (1)
5. If (e is NB) and (ec is PS) then (u is PS) (1)
6. If (e is NB) and (ec is PM) then (u is PS) (1)
7. If (e is NB) and (ec is PB) then (u is Z) (1)
8. If (e is NM) and (ec is NB) then (u is PB) (1)
9. If (e is NM) and (ec is NM) then (u is PM) (1)
10. If (e is NM) and (ec is NS) then (u is PM) (1)
11. If (e is NM) and (ec is Z) then (u is PS) (1)
12. If (e is NM) and (ec is PS) then (u is PS) (1)
13. If (e is NM) and (ec is PM) then (u is Z) (1)
14. If (e is NM) and (ec is PB) then (u is NS) (1)
15. If (e is NS) and (ec is NB) then (u is PM) (1)
16. If (e is NS) and (ec is NM) then (u is PM) (1)
17. If (e is NS) and (ec is NS) then (u is PS) (1)
18. If (e is NS) and (ec is Z) then (u is PS) (1)
19. If (e is NS) and (ec is PS) then (u is Z) (1)
20. If (e is NS) and (ec is PM) then (u is NS) (1)
21. If (e is NS) and (ec is PB) then (u is NS) (1)
22. If (e is Z) and (ec is NB) then (u is PM) (1)
23. If (e is Z) and (ec is NM) then (u is PS) (1)
24. If (e is Z) and (ec is NS) then (u is PS) (1)
25. If (e is Z) and (ec is Z) then (u is Z) (1)
26. If (e is Z) and (ec is PS) then (u is NS) (1)
27. If (e is Z) and (ec is PM) then (u is NS) (1)
28. If (e is Z) and (ec is PB) then (u is NM) (1)
29. If (e is PS) and (ec is NB) then (u is PS) (1)
30. If (e is PS) and (ec is NM) then (u is PS) (1)
31. If (e is PS) and (ec is NS) then (u is Z) (1)
32. If (e is PS) and (ec is Z) then (u is NS) (1)
33. If (e is PS) and (ec is PS) then (u is NS) (1)
34. If (e is PS) and (ec is PM) then (u is NM) (1)
35. If (e is PS) and (ec is PB) then (u is NM) (1)
36. If (e is PM) and (ec is NB) then (u is PS) (1)
37. If (e is PM) and (ec is NM) then (u is PS) (1)
38. If (e is PM) and (ec is NS) then (u is Z) (1)
39. If (e is PM) and (ec is Z) then (u is NS) (1)
40. If (e is PM) and (ec is PS) then (u is NM) (1)
41. If (e is PM) and (ec is PM) then (u is NM) (1)
42. If (e is PM) and (ec is PB) then (u is NB) (1)
43. If (e is PB) and (ec is NB) then (u is Z) (1)
44. If (e is PB) and (ec is NM) then (u is NS) (1)
45. If (e is PB) and (ec is NS) then (u is NS) (1)
46. If (e is PB) and (ec is Z) then (u is NM) (1)
47. If (e is PB) and (ec is PS) then (u is NM) (1)
48. If (e is PB) and (ec is PM) then (u is NB) (1)
49. If (e is PB) and (ec is PB) then (u is NB) (1)
第三:控制闭环的设计
通常,一个传统的模糊控制器的闭环结构如下所示:

模糊控制器的基本结构:

3.部分源码
addpath 'func\'
title_function
%初始化
fnn_parameter;
%被控对象
a1 = 1.2;
b1 = 1;
b2 = 0.8;
b3 = 0;
ta = 40;
sys = tf(a1,[b1,b2,b3]);
dsys = c2d(sys,0.1,'z');
[num,den] = tfdata(dsys,'v');
ts = 0.1;%采样时间T=0.1
%闭环控制器
for k=1:SIM_times
k
time(k) = k*ts;
%定义输入信号
yd(k) = 2;
%定义输出信号
if k < ta
yn = 0;
else
yn = -den(2)*y1 - den(3)*y2 + num(2)*u1 + num(3)*u2;
end
y2 = y1;
y1 = yn;
y(k) = yn;
u2 = u1;
e2 = e1;
e1 = yd(k)-yn;
e(k) = e1;
ec =(e1-e2);
x1 =(1-exp(-10*e1))/(1+exp(-10*e1));
x2 =(1-exp(-ec))/(1+exp(-ec));
%第1层输出
for i=1:7
o11(i) = x1;
o12(i) = x2;
end
o1=[o11;o12];
%第2层输出
for i=1:2
for j=1:7
z1(i,j) =-((o1(i,j)-a(i,j))^2)/(b(i,j));
o2(i,j) = exp(z1(i,j));
end
end
%第3层输出
for j=1:7
for l=1:7
o3((j-1)*7+l)=o2(1,j)*o2(2,l);
end
end
%第4层输出
I=0;
for i=1:49
I = I + o3(i)*Weight(i)/4;
end
o4 = I/(sum(o3));
u(k) = o4;
u1 = o4;
%梯度下降法调整权值
for i=1:49
dwp = e1*du*o3(i)/(sum(o3));
%迭代
Weight(i) = Weight(i) + eta*dwp;
end
%中心值更新
da11=zeros(1,7);
for j=1:7
for l=1:7
da11(j) = da11(j)+(o2(2,l)*((Weight((j-1)*7+l)*sum(o3))-I));
end
da12(1,j) = -e1*du*(2*(o1(1,j)-a(1,j))*(o2(1,j)))/((b(1,j)^2)*(sum(o3))^2);
da1(j) = (da12(1,j))*(da11(j));
end
da21 = zeros(1,7);
for j=1:7
for l=1:7
da21(j) = da21(j)+(o2(1,l)*((Weight((l-1)*7+j)*sum(o3))-I));
end
da22(2,j) = -e1*du*(2*(o1(2,j)-a(2,j))*(o2(2,j))/((b(2,j)^2)*(sum(o3))^2));
da2(j) = (da22(2,j))*(da21(j));
end
da=[da1;da2];
for i=1:2
for j=1:7
a(i,j)=a(i,j)-eta*da(i,j);
end
end
a_s(:,:,k) = a;
if k == 1
a_(:,:,k) = a_s(:,:,1);
else
for i = 1:2
for j = 1:7
dist_tmp(i,j) = (a_s(i,j,k) - a_(i,j))^2;
end
end
dist = sqrt(sum(sum(dist_tmp)));
if dist < 0.1
tmps(:,:,1) = a_(:,:,k-1);
tmps(:,:,2) = a_s(:,:,k);
a_(:,:,k) = mean(tmps(:,:,1:2),3);
else
a_(:,:,k) = a_(:,:,k-1);
end
end
a = a_(:,:,k);
%宽度更新
db11=zeros(1,7);
for j=1:7
for l=1:7
db11(j)=db11(j)+(o2(2,l)*((Weight((j-1)*7+l)*sum(o3))-I));
end
db12(1,j)=-e1*du*(2*(o1(1,j)-a(1,j))^2)*(o2(1,j))/((b(1,j)^3)*(sum(o3))^2);
db1(j)=(db12(1,j))*(db11(j));
end
db21=zeros(1,7);
for j=1:7
for l=1:7
db21(j)=db21(j)+(o2(1,l)*((Weight((l-1)*7+j)*sum(o3))-I));
end
db22(2,j)=-e1*du*(2*(o1(2,j)-a(2,j))^2)*(o2(2,j))/((b(2,j)^3)*(sum(o3))^2);
db2(j)=(db22(2,j))*(db21(j));
end
db=[db1;db2];
for i=1:2
for j=1:7
b(i,j)=b(i,j)-eta*db(i,j);
end
end
b_s(:,:,k) = b;
if k == 1
b_(:,:,k) = b_s(:,:,1);
else
for i = 1:2
for j = 1:7
dist_tmp(i,j) = (b_s(i,j,k) - b_(i,j))^2;
end
end
dist = sqrt(sum(sum(dist_tmp)));
if dist < 0.1
tmps(:,:,1) = b_(:,:,k-1);
tmps(:,:,2) = b_s(:,:,k);
b_(:,:,k) = mean(tmps(:,:,1:2),3);
else
b_(:,:,k) = b_(:,:,k-1);
end
end
b = b_(:,:,k);
%算法
s11 = y1;
s12 = y2;
s13 = u1;
s14 = u2;
s1 =[s11;s12;s13;s14];
for i=1:5
net2(i) = w2(i,:)*s1 + theta2(i);
s2(i) = (1-exp(-net2(i)))/(1+exp(-net2(i)));
end
net3 = w3*s2+theta3;
yg = am*(1-exp(-net3))/(1+exp(-net3));
for i=1:5
delta2(i)=0.5*(1-s2(i))*(1+s2(i));
end
delta3=0.5*am*(1-yg/am)*(1+yg/am);
for i=1:5
theta22(i) = theta2(i)-theta21(i);
theta21(i) = theta2(i);
theta2(i) = theta2(i)+eta1*(yn-yg)*delta3*w3(i)*delta2(i)+beta1*theta22(i);
end
theta32 = theta3-theta31;
theta31 = theta3;
theta3 = theta3+eta1*(yn-yg)*delta3+beta1*theta32;
for i=1:5
for j=1:4
w22(i,j) = w2(i,j)-w21(i,j);
w21(i,j) = w2(i,j);
w2(i,j) = w2(i,j)-eta1*(yn-yg)*delta3*w3(i)*delta2(i)*s1(j)+beta1*w22(i,j);
end
w32(i) = w3(i)-w31(i);
w31(i) = w3(i);
w3(i) = w3(i)-eta1*(yn-yg)*delta3*s2(i)+beta1*w32(i);
end
a2 = am-a1;
a1 = am;
am = am+eta1*(yn-yg)*yg/am+beta1*a2;
sum1 = 0;
for i=1:5
sum1 = sum1 + w3(i)*delta2(i)*w2(i,3);
end
du = delta3*sum1;
end
figure;
plot(time,y,'r', time,yd,'b');
grid on
figure;
subplot(121);
plot(a_s(1,:,SIM_times),a_s(2,:,SIM_times),'o');
grid on
axis square
subplot(122);
plot(b_s(1,:,SIM_times),b_s(2,:,SIM_times),'o');
grid on
axis square
save Simu_Results\fnn_result.mat time y
save Simu_Results\nfis.mat a b
这里重点介绍一下模糊神经网络控制器的设计,
第一:四层化神经网络层的结构设计:
第1层:

![]()
第2层:

![]()
第3层:

![]()
第4层:


第二:利用梯度下降法进行权值更新


4.仿真结果
模糊控制效果图(模型一):

模糊控制效果图(模型二):

隶属函数如下所示:







A05-06
边栏推荐
- Appium automation test foundation - Supplement: app package name and appactivity
- Jenkins - 訪問 Jenkins 自定義參數變量,處理變量值中含有空格
- 系统管理员设置了系统策略,禁止进行此安装。解决方案
- Anonymous Mount & named mount
- Machine learning (x) reinforcement learning
- I forgot my cell phone today
- Opencv——几何空间变换(仿射变换和投影变换)
- 【历史上的今天】6 月 2 日:苹果推出了 Swift 编程语言;电信收购联通 C 网;OS X Yosemite 发布
- 畢業總結
- Data governance and data standards
猜你喜欢

【历史上的今天】6 月 1 日:Napster 成立;MS-DOS 原作者出生;谷歌出售 Google SketchUp

Jenkins - email notification plug-in

如何系统学习LabVIEW?

Jenkins - access the Jenkins user-defined parameter variable, and handle the variable value containing spaces

Jenkins - built in variable access

Starting sequence of Turing machine

【历史上的今天】6 月 11 日:蒙特卡罗方法的共同发明者出生;谷歌推出 Google 地球;谷歌收购 Waze

【历史上的今天】6 月 18 日:京东诞生;网店平台 Etsy 成立;Facebook 发布 Libra 白皮书
![[JS reverse hundreds of examples] I love to solve 2022 Spring Festival problems and receive red envelopes](/img/9b/4e0b5838f8c272e9fbc25eb8ef5efa.jpg)
[JS reverse hundreds of examples] I love to solve 2022 Spring Festival problems and receive red envelopes

How to use data-driven "customer lifecycle management" to improve lead conversion rate and customer satisfaction?
随机推荐
Jenkins - 内置变量访问
低代码DSL里面在数仓中的实践
Appium automation test foundation - Supplement: app package name and appactivity
Mysql数据库基础:DML数据操作语言
一种低成本增长私域流量,且维护简单的方法
Architecture high reliability application knowledge map ----- microservice architecture map
From how to use to how to implement a promise
Scoped attribute and lang attribute in style
KVM related
【二维码图像矫正增强】基于MATLAB的二维码图像矫正增强处理仿真
文件传输协议--FTP
Keil "St link USB communication error" solution
Jenkins - data sharing and transfer between copy artifact plug-in builds
Keil “st-link usb communication error“解决方法
Skills in schematic merging
Flutter 使用 CustomPaint 绘制基本图形
There appears to be a failure with your network connection Retrying.
Appium automation test foundation ADB common commands (I)
Fundamentals of scala (3): operators and process control
【历史上的今天】6 月 19 日:iPhone 3GS 上市;帕斯卡诞生;《反恐精英》开始测试