本文主要是代码的实现
代码包含了传统三角形模糊识别,指数型三角形模糊识别,以及由本人改进的基于正态分布的三角形模糊识别
对于正态分布函数做了一定的改进,幂次的分母项我将它称之为敏感度,此外对于等腰直角三角形的识别还是比较困难,所以我还设置了阈值,这两个参数是由我自己主观给出,也可通过训练集计算得出,本人不会机器学习就不细讲,以下是代码实现
clear
clc
disp('三角形模糊识别')
disp('请输入三角形ABC的三个角,严格按照从大到小排序');
A=input('输入第一大角A=');
B=input('输入第二大角B=');
C=input('输入第三大角C=');
if A+B+C~=180
error('三个角度数总和不为180°,请重新输入')
end
if A<B||A<C||B<C
error('三个角度没有严格按照从大到小排序,请重新输入')
end
%传统三角形模糊识别隶属函数
E=1-(1/180)*max(A-B,B-C);%等边三角形
I=1-(1/60)*min(A-B,B-C);%等腰三角形
R=1-(1/90)*abs(A-90);%直角三角形
IR=1-max((1/60)*min(A-B,B-C),(1/90)*abs(A-90));%等腰直角三角形
T=min(min(E,I),R);%非典型三角形
max1=max(max(max(E,I),max(R,IR)),T);
%判断三角形类型
max1=I;F1='这是一个等腰三角形';
if max1<E
max1=E;
F1='这是一个等边三角形';
end
if max1<R
max1=R;
F1='这是一个直角三角形';
end
if max1<IR
max1=IR;
F1='这是一个等腰直角三角形';
end
if max1<T
max1=T;
F1='这是一个非典型三角形';
end
disp('传统三角形模糊识别');
disp(F1);
disp('其隶属度分别为');
disp('等边三角形 等腰三角形 直角三角形 等腰直角三角形 非典型三角形');
disp([E,I,R,IR,T]);
%指数型三角形模糊识别隶属函数
Ez=(1-(1/180)*max(A-B,B-C))^max(A-B,B-C);%等边三角形
Iz=(1-(1/60)*min(A-B,B-C))^min(A-B,A-C);%等腰三角形
Rz=(1-(1/90)*abs(A-90))^abs(A-90);%直角三角形
IRz=min(Iz,Rz);%等腰直角三角形
Tz=min(min(Ez,Iz),Rz);%非典型三角形
max2=max(max(max(Ez,Iz),max(Rz,IRz)),Tz);
%判断三角形类型
max2=I;F2='这是一个等腰三角形';
if max2<E
max2=E;
F2='这是一个等边三角形';
end
if max2<R
max2=R;
F2='这是一个直角三角形';
end
if max2<IR
max2=IR;
F2='这是一个等腰直角三角形';
end
if max2<T
max2=T;
F2='这是一个非典型三角形';
end
disp('指数型三角形模糊识别');
disp(F2);
disp('其隶属度分别为');
disp('等边三角形 等腰三角形 直角三角形 等腰直角三角形 非典型三角形');
disp([Ez,Iz,Rz,IRz,Tz]);
%基于正态分布的三角形模糊识别隶属函数---(Zooxerkano)
X=(A*C)/(B*(B+C));
Ezx=exp(-((max(A-B,B-C))/6)^2);
Izx=exp(-((min(A-B,B-C))*10/B)^2);
Rzx=exp(-((abs(A-90))/9)^2);
IRzx=exp(-((X-1)/0.1)^2);
Tzx=1-max(max(Ezx,Izx),max(Rzx,IRzx));
IRzx1=min(Izx,Rzx);
max3=max(max(max(Ezx,Izx),max(Rzx,IRzx)),Tzx);
max3=Izx;F3='这是一个等腰三角形';
if max3<Ezx
max3=Ezx;
F3='这是一个等边三角形';
end
if max3<Rzx
max3=Rzx;
F3='这是一个直角三角形';
end
if max3<IRzx||IRzx1>0.95
max3=IRzx;
F3='这是一个等腰直角三角形';
end
if max3<Tzx
max3=Tzx;
F3='这是一个非典型三角形';
end
disp('基于正态分布的三角形模糊识别---(Zooxerkano)');
disp(F3);
disp('其隶属度分别为');
disp('等边三角形 等腰三角形 直角三角形 等腰直角三角形 非典型三角形');
disp([Ezx,Izx,Rzx,IRzx,Tzx]);