• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Matlab
  • 标签: matlab  

资源简介

模糊综合评价的一个实际例子,附有malab语言源程序代码

资源截图

代码片段和文件信息



%--------------------------------------------------------------------------
%  
%  %mohu.m
%本程序为模糊综合评判的程序,人为给定权重
%程序运行,直接输入命令mohu即可
%本程序可以进行扩展
%对于进行二级模糊综合评判,可编制mohufun.m函数来实现
%如[yy1qdhqdh1]=mohufun(RLMwXXyy]来实现运行两次这个函数,并编制相应的m文件,其中放至两个这样的函数即可实
%现
%模糊评判的结果说明:
%1:对于所有等级的隶属度之和为1。
%2:输出结果随某个变量的增大而qdh1的结果呈现出单调递增或递减
%3:最后的等级出[0.2 0 0 0.8]这种情况是正常的,和可拓评判中的对于等级的距离的概念是不一样的。
%只表现有变量是属于0.2这个等级的。
%--------------------------------------------------------------------------

clc
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%此部分由计算时,人为给定部分,即相关求解条件
%要求计算前输入部分
R=4;  %影响因素的个数
L=4;  %评判的等级个数
M=29; %待评价洞段的个数
w=[0.1 0.7 0.1 0.1];%各指标的权重
%可拓评判的经典域,每天列构成一组,共有L组,由左到右依此为1,2,3,4
%评判结果为1,则表示属于最左边的经典域,为4则属于最右边的经典域
%XX为隶属函数的范围,具体可参见论文基于粗集的模糊综合评判,一个有四个隶属函数
%前两个数,确定是一个下降段的隶属函数,分成三段
%以后依此4上数为一组,确定一个梯形的隶属函数,分成五段
%最后两个是单独一组,为一个上升段的隶属函数分成三段
%下面的每行有12个数,其分成4个等级,分办界点数个2 4 4 2 之和为12
%也就是构成四个等级范围
%XX也是计算的核心数据
xx=[70 90 70 90 110 130 110 130 170 190 170 190
   45 35 45 35 30 20 30 20 17 10 17 10
  1.5 2.5 1.5 2.5 3 4 3 4 4.5 5.5 4.5 5.5
0.25 0.35 0.25 0.35 0.45 0.55 0.45 0.55 0.65 0.75 0.65 0.75];

%pp1为个指标为越大,等级越高,还是越大,等级越小的指标
%0为指标值越大,等级越大
%1为指标值越大,等级越小
%这一点要严格执行,XX(i:)从小到大为0XX(i:)从大到小为1
%若将以上的XX第行的顺序颠倒,则为pp1=[1 0 1 1 ]
pp1=[0 1 0 0];
%各待评价洞段参数
yy=[200 8 6 0.8
200 9.5 6 0.8
200 11 6 0.8
200 12.5 6 0.8
200 14 6 0.8
200 15.5 6 0.8
200 17 6 0.8
200 18.5 6 0.8
200 20 6 0.8
200 21.5 6 0.8
200 23 6 0.8
200 24.5 6 0.8
200 26 6 0.8
200 27.5 6 0.8
200 29 6 0.8
200 30.5 6 0.8
200 32 6 0.8
200 33.5 6 0.8
200 35 6 0.8
200 36.5 6 0.8
200 38 6 0.8
200 39.5 6 0.8
200 41 6 0.8
200 42.5 6 0.8
200 44 6 0.8
200 45.5 6 0.8
200 47 6 0.8
200 48.5 6 0.8
200 50 6 0.8
];
%下升段和下降段的隶属函数形式
%注意隶属函数的形式和论文中的隶属函数形式也要一样,否则要更改程序中的基些部分
%这里的a指区间的中间点,b指区间的宽度
f1=inline(‘0.5-0.5*sin((x-a)*pi/b)‘‘a‘‘b‘‘x‘);
f2=inline(‘0.5+0.5*sin((x-a)*pi/b)‘‘a‘‘b‘‘x‘);




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%
%求每个指标对于第一个等级的隶属度
for i=1:M
    for k=1:R
        j=1;
   if pp1(k)==0     %先是求越大,等级越高的指标    
if yy(ik)    yy1(ikj)=1;
elseif yy(ik)<=xx(kj+1)
    yy1(ikj)=f1(0.5*(xx(kj)+xx(kj+1))abs(xx(kj)-xx(kj+1))yy(ik)) ;
else yy1(ikj)=0;
end
%再是求值越小,等级越高的指标
%下在和一个相比大于和小于要互换,函数f1和f2也要互换
   elseif yy(ik)>xx(kj)
    yy1(ikj)=1;
elseif yy(ik)>=xx(kj+1)
    yy1(ikj)=f2(0.5*(xx(kj)+xx(kj+1))abs(xx(kj)-xx(kj+1))yy(ik));  
else yy1(ikj)=0;
end

        end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%求每个指标对于最后一个等级的隶属度
 for i=1:M
    for k=1:R
        j=L;
        if pp1(k)==0       %先是求越大,等级越高的指标 
if yy(ik)    yy1(ikj)=0;
elseif yy(ik)<=xx(kj*4-4)
    yy1(ikj)=f2(0.5*(xx(kj*4-5)+xx(kj*4-4))abs(xx(kj*4-5)-xx(kj*4-4))yy(ik));  
else yy1(ikj)=1;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5766  2008-03-01 21:54  mohu.m

----------- ---------  ---------- -----  ----

                 5984                    2


评论

共有 条评论