最终版
clear all;
% 单指标输入值(自变量):
k1 = [4.964 4.393 5.298 4.476 6.452 9.064 10.445 10.765 15.741 16.120 19.415
] ;
% 五等级隶属度函数参数:
b1 =[3 4 5 6 7 9 10]; % 下限
% b1 =b1';
b2= [4 5 6 7 8 10 11]; % 上限
% b2 =b2';
[m,n] = size(k1);
[h,k]= size(b1);
for j=1:n % 循环每一个样本
%% min 隶属度函数 2个较小,一个中间,2个极大
for k=1:2
%x1(:,j) = (k1(:,j)-1);% x取值范围0~200
x1(:,j) = k1(:,j)
if x1(:,j) >= 0 && x1(:,j) <=b1(1,k)
y1(k,j)=1.0;
elseif x1(:,j) >= b1(1,k) && x1(:,j) <= b2(1,k)
y1(k,j) = (b2(1,k) - x1(:,j))/(b2(1,k) - b1(1,k));
else %(>b2)
y1(k,j) = 0.0;
end
end
%% intemidiate
for k=3
if x1(:,j) <b1(1,3)
y1(k,j)=0.0;
elseif x1(:,j) >= b1(1,3) && x1(:,j) <=b2(1,3)
y1(k,j) = (x1(:,j)-b1(1,3))/(b2(1,3) - b1(1,3));
elseif x1(:,j) >= b1(1,4) && x1(:,j) <=b2(1,4)
y1(k,j) = 1.0;
elseif x1(:,j) >= b1(1,5) && x1(:,j) <= b2(1,5)
y1(k,j) = (b2(1,5) - x1(:,j)) / ( b2(1,5) - b1(1,5) );
else
y1(k,j) = 0.0;
end
end
%% max
for k=6:7
x1(:,j) = k1(:,j)
if x1(:,j) >= 0 && x1(:,j) <=b1(1,k)
y1(k,j)=0.0;
elseif x1(:,j) >= b1(1,k) && x1(:,j) <= b2(1,k)
y1(k,j) = (x1(:,j)-b1(1,k))/(b2(1,k) - b1(1,k));
else %(>b2)
y1(k,j) =1.0;
end
end
end
%%
y1(4:5,:)=[] % 使用空矩阵[]删除y1的4、5行
disp(y1)
初级版
% 末尾有介绍
% Membership function for W People “很年轻W”的隶属函数曲线
clear all;
close all;
%% max
k1 = [2 12 23 45 57] ; % 自变量
a1= 1 ; a2 = 70 ; % 参数
[m,n] = size(k1);
% 隶属度函数
for j=1:n
x1(:,j) = (k1(:,j)-1);% x取值范围0~200
if x1(:,j) >= 0 && x1(:,j) <=a1
y1(:,j)=0.0;
elseif x1(:,j) >= a1 && x1(:,j) <= a2
y1(:,j) = (x1(:,j)-a1)/(a2 - a1);
else %(>a2)
y1(:,j) = 1.0;
end
end
disp(y1)
%% min
k1 = [1.129 1.258 1.252 1.985 1.953 1.967 1.976 2.035 2.307 2.448 2.634
] ; % 自变量
b1= 1 ; b2 = 1.2; % 参数
[m,n] = size(k1);
for j=1:n % 隶属度函数
%x1(:,j) = (k1(:,j)-1);% x取值范围0~200
x1(:,j) = k1(:,j)
if x1(:,j) >= 0 && x1(:,j) <=b1
y1(:,j)=1.0;
elseif x1(:,j) >= b1 && x1(:,j) <= b2
y1(:,j) = (b2 - x1(:,j))/(b2 - b1);
else %(>b2)
y1(:,j) = 0.0;
end
end
disp(y1)
%% int (先大后小)
c1= ; c2 ; c3; c4 ;
% for j=1:n % 隶属度函数
% x1(:,j) = (k1(:,j)-1);% x取值范围0~200
% if x1(:,j) < c1
% y1(:,j)=0.0;
% elseif x1(:,j) >= c1 && x1(:,j) <=c2
% y1(:,j) = (x1(:,j)-c1)/(c2 - c1);
% elseif x1(:,j) >= c2 && x1(:,j) <= c3
% y1(:,j) = 1.0;
% elseif x1(:,j) >= c3 && x1(:,j) <= c4
% y1(:,j) = (c4 - x1(:,j))/(c4 - c3);
% else
% y1(:,j) = 0.0;
% end
% end
% % fprintf(' y1(k1) is %8.5f\n', y1(k1))
%
%年轻25
for k = 1:1:2001
x(k) = (k-1)*0.1;
if x(k)>=0&x(k)<=25
y(k) = 1.0;
elseif x(k)>25&x(k)<=70
y(k)=(70 - x(k))/45;
else
y(k) = 0;
end
end
%很年轻 Z型
for k2 = 1:1:2001
x2(k2) = (k2-1) * 0.1;
y2(k2) = zmf(x(k2),[15,50]);
end
%不老也不年轻 钟型
for k3 = 1:1:2001
x3(k3) = (k3-1)*0.1;
y3(k3) = gbellmf(x3(k3),[10,5,50]);
end
%figure(1);
plot(x,y,'k','Color',[1 0 0],'LineWidth',2);
xlabel('x Years');
ylabel('Y');
%figure('x','y','年轻 Y');
hold on;
%figure(2)
plot(x1,y1,'k','Color',[0 1 0],'LineWidth',2);
xlabel('x Years');
ylabel('Y');
%figure('x1','y1','年老 O');
hold on;
%figure(3)
plot(x2,y2,'k','Color',[0 0 1],'LineWidth',2);
xlabel('x Years');
ylabel('Y');
%figure('x2','y2','很年轻 W');
hold on;
%figure(4)
plot(x3,y3,'k','Color',[0.5 0.5 0.5],'LineWidth',2);
xlabel('x Years');
ylabel('Y');
%figure('x3','y3','不老也不年轻 V');
legend('年轻 Y','年老 O','很年轻 W','不老也不年轻 V')
%http://t.csdn.cn/KKrhP
修改版
clear all;
close all;
%% max
x1 = [4.964 4.393 5.298 4.476 6.452 9.064 10.445 10.765 15.741 16.120 19.415
] ; % 自变量
a1=9 ; a2 = 15; % 参数
[m,n] = size(k1);
% 隶属度函数
for j=1:n
x1(:,j) = (k1(:,j));% x取值范围0~200
if x1(:,j) >= 0 && x1(:,j) <=a1
y1(:,j)=0.0;
elseif x1(:,j) >= a1 && x1(:,j) <= a2
y1(:,j) = (x1(:,j)-a1)/(a2 - a1);
else %(>a2)
y1(:,j) = 1.0;
end
end
disp(y1)
%% min
clear all;
% 单指标输入值(自变量):
k1 = [4.964 4.393 5.298 4.476 6.452 9.064 10.445 10.765 15.741 16.120 19.415
] ;
% 七等级隶属度函数参数:
b1 =[3 4 5 6 7 8 9];
% b1 =b1';
b2= [4 5 6 7 8 9 10];
% b2 =b2';
[m,n] = size(k1);
[h,l] = size(b1);
for j=1:n % 隶属度函数
for k=1:l
%x1(:,j) = (k1(:,j)-1);% x取值范围0~200
x1(:,j) = k1(:,j)
if x1(:,j) >= 0 && x1(:,j) <=b1(1,k)
y1(k,j)=1.0;
elseif x1(:,j) >= b1(1,k) && x1(:,j) <= b2(1,k)
y1(k,j) = (b2(1,k) - x1(:,j))/(b2(1,k) - b1(1,k));
else %(>b2)
y1(k,j) = 0.0;
end
end
end
disp(y1)
%% int (先大后小)
x1 = [4.964 4.393 5.298 4.476 6.452 9.064 10.445 10.765 15.741 16.120 19.415
] ; % 自变量
c1=8 ; c2=9 ; c3=10; c4=11 ;
for j=1:n % 隶属度函数
x1(:,j) = (k1(:,j));% x取值范围0~200
if x1(:,j) < c1
y1(:,j)=0.0;
elseif x1(:,j) >= c1 && x1(:,j) <=c2
y1(:,j) = (x1(:,j)-c1)/(c2 - c1);
elseif x1(:,j) >= c2 && x1(:,j) <= c3
y1(:,j) = 1.0;
elseif x1(:,j) >= c3 && x1(:,j) <= c4
y1(:,j) = (c4 - x1(:,j))/(c4 - c3);
else
y1(:,j) = 0.0;
end
end
disp(y1)
% % fprintf(' y1(k1) is %8.5f\n', y1(k1))
%