clc;
clear;tic
E = [1,0.8,0.7,0.4,0.1,0,0,0,0,0,0,0,0;
0.2,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;
0,0.1,0.3,0.7,1,0.7,0.2,0,0,0,0,0,0;
0,0,0,0,0.1,0.6,1,0,0,0,0,0,0;
0,0,0,0,0,0,1,0.6,0.1,0,0,0,0;
0,0,0,0,0,0,0.2,0.7,1,0.7,0.3,0.1,0;
0,0,0,0,0,0,0,0,0.2,0.7,1,0.7,0.3;
0,0,0,0,0,0,0,0,0.1,0.4,0.7,0.8,1]%%8*13
EC =[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;
0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;
0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;
0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;
0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;
0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;
0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13
U=[1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;
0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0;
0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0;
0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0;
0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0;
0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3;
0,0,0,0,0,0,0,0,0,0,0.3,0.7,1]%%7*13
rulelist= [1,1,1,1,2,4,4;
1,1,1,1,2,4,4;
2,2,2,2,4,5,5;
2,2,3,4,5,6,6;
2,2,3,4,5,6,6;
3,3,4,6,6,6,6;
4,4,6,7,7,7,7;
4,4,6,7,7,7,7]%%8*7
for iii=1:13 %偏差E的模糊值控制
for jjj=1:13 %偏差率EC的模糊值控制
for ii=1:8 %偏差E的模糊规则控制
for jj=1:7 %偏差变化率EC的模糊规则控制
A_rulelist = rulelist(ii,jj); %查模糊规则表
%******计算C1A'************
A = E(ii,:); %取A'
C_A = U(A_rulelist,:); %取Ci
for i=1:13 %求R1A
for j=1:13
if(A(i) > C_A(1,j))
Ra(i,j) = C_A(1,j);
else
Ra(i,j) = A(i);
end
end
end
AA = zeros(1,13); %取AA=A'
%AA(1,iii) = E(ii,iii);
AA(1,iii) = 1;
for i=1:13 %先取小
for j=1:13
if(AA(j) > Ra(j,i))
A_qux(j,i) = Ra(j,i);
else
A_qux(j,i) = AA(j);
end
end
end
for i=1:13 %再取大,,,求和CiA
max = A_qux(1,i);
for j=1:13
if(max < A_qux(j,i))
max = A_qux(j,i);
end
end
CiA(i) = max;
end
%********CiA计算完毕*********
%*******计算CiB'*************
B = EC(jj,:); %取B' ???
C_B = U(A_rulelist,:); %取Ci ???
for i=1:13 %求R1B
for j=1:13
if(B(1,i) > C_B(1,j))
Rb(i,j) = C_B(1,j);
else
Rb(i,j) = B(1,i);
end
end
end
BB = zeros(1,13); %取BB=B'
%BB(1,jjj) = EC(jj,jjj);
BB(1,jjj) = 1;
for i=1:13 %先取小
for j=1:13
if(BB(j) > Rb(j,i))
B_qux(j,i) = Rb(j,i);
else
B_qux(j,i) = BB(j);
end
end
end
for i=1:13 %再取大,,,求和CiA
max = B_qux(1,i);
for j=1:13
if(max < B_qux(j,i))
max = B_qux(j,i);
end
end
CiB(i) = max;
end
%*******计算CiB'完毕****
%*******计算C1'=CiA'交CiB'*********
for i=1:13
if CiA(i) > CiB(i)
Ci(i) = CiB(i);
else
Ci(i) = CiA(i);
end
end
%*******计算C1'完毕************
C((ii-1)*7+jj,:) = Ci; % 将Ci存到数组C中,C是56*13的数组
end
end
%根据式Ui=C'=C1'并C2'并……并C56'
for i=1:13
max = C(1,i);
for j=1:56
if(max < C(j,i))
max = C(j,i);
end
end
Ui(i) = max;
end
%用重心法进行解模糊运算,并映射为实际的控制量
sum_fenz = 0;
sum_fenm = 0;
for i=1:13
sum_fenz = sum_fenz + (i-7)*Ui(i);
sum_fenm = sum_fenm + Ui(i);
end
core = sum_fenz/sum_fenm;
U_control(iii,jjj) = core;
end
end
U_control = round(U_control.*10000)/10000; %对控制量保留小数点后四位
toc