模糊综合评判算法 C语言版本.doc

上传人:博****1 文档编号:544094624 上传时间:2023-12-09 格式:DOC 页数:7 大小:34.01KB
返回 下载 相关 举报
模糊综合评判算法 C语言版本.doc_第1页
第1页 / 共7页
模糊综合评判算法 C语言版本.doc_第2页
第2页 / 共7页
模糊综合评判算法 C语言版本.doc_第3页
第3页 / 共7页
模糊综合评判算法 C语言版本.doc_第4页
第4页 / 共7页
模糊综合评判算法 C语言版本.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《模糊综合评判算法 C语言版本.doc》由会员分享,可在线阅读,更多相关《模糊综合评判算法 C语言版本.doc(7页珍藏版)》请在金锄头文库上搜索。

1、模糊综合评判算法 C语言版本2008-01-05 22:24本算法评价集个数为5,评价因子个数为6,采用超标加权法计算权重,线性降半阶隶属函数#include #define MatrixRows 5#define MatrixCols 6double CalculateAverage(int m,double aMatrixRowsMatrixCols) /计算平均值,m表示第m列的平均值 double myResult;int i;myResult=0; for(i=0;iMatrixRows;i+) myResult+=aim;myResult=myResult/MatrixRows;

2、/ printf(%lfn,myResult);return myResult;double EWeight(int m,double aMatrixRowsMatrixCols,double bMatrixCols) /计算权重数组E,m为第m列的权重值double AverMatrixCols ; /m个含水层同一评价因子的平均值double EResult; /计算权重结果 double ETotal; /归一划权重和 int i;for(i=0;iMatrixCols;i+)Averi=CalculateAverage(i,a);ETotal=0;for(i=0;iMatrixCols

3、;i+)ETotal+=(bi/Averi);EResult=(bm/Averm)/ETotal;return EResult;double Sort(int m,int n,double aMatrixRowsMatrixCols)double bMatrixRowsMatrixCols; /排序后的结果,对数组的每一个列中的四个数字进行从小到大排列int i,j,k; /不可以直接对aMatrixRowsMatrixCols进行排序,因为是数组是传地址计算 for(i=0;iMatrixRows;i+) /for(j=0;jMatrixCols;j+) bij=aij;for(j=0;jM

4、atrixCols;j+)for(i=0;iMatrixRows-1;i+) for(k=i;kbkj) /排序 double tmp; tmp=bij; bij=bkj; bkj=tmp; return bmn;double Lishudu(int m,int n,double aMatrixRowsMatrixCols,double bMatrixCols) /计算当前样本bMatrixCols对各个评价因子的隶属度 double cMatrixRowsMatrixCols; /排序后的结果double LSDResultMatrixColsMatrixRows; /隶属度计算结果,即评价

5、集与评价因子的关系矩阵int i,j,k; for(i=0;iMatrixRows;i+)for(j=0;jMatrixCols;j+) cij=Sort(i,j,a); /排序 for(j=0;jMatrixCols;j+)for(i=0;iMatrixRows;i+) for(k=0;kMatrixRows;k+) if(aij=ckj) if(k=0) if(bj=ckj&bj=ck+1j) LSDResultji=0; if(k=1|k=2|k=3) if(bj=ck-1j&bj=ckj&bj=ck+1j) LSDResultji=0; if(k=4) if(bj=ck-1j & bj

6、=ckj) LSDResultji=1; return LSDResultmn; double FuzzyEvalution(int x,int m,int n,double aMatrixRowsMatrixCols,double bMatrixCols)double EMatrixCols; /超标加权法计算权重double RMatrixColsMatrixRows; /评价集与评价因子关系矩阵 double FEResultMatrixRows;/最终计算对各个评价集的隶属度int i,j;for(i=0;iMatrixCols;i+)for(j=0;jMatrixRows;j+) R

7、ij=Lishudu(i,j,a,b); /函数参数aMatrixRowsMatrixCols,得到的计算结果为MatrixCols X MatrixRows矩阵 for(i=0;iMatrixCols;i+)Ei=EWeight(i,a,b);for(i=0; iMatrixRows;i+)FEResulti=0;for(j=0;jMatrixCols;j+) FEResulti+=Ej*Rji;return FEResultx;void main()double aMatrixRowsMatrixCols; /保存评价集标注值 double bMatrixCols; /保存待测出水点水样的

8、值double myResultMatrixRows; /保存计算结果double myweightMatrixCols; /计算权重的结果double mysortMatrixRowsMatrixCols; /排序结果double myLiShuDuMatrixColsMatrixRows;/评判集和评判因子的关系矩阵int i,j;/printf(请输入评判集标准值:n);for(i=0;iMatrixRows;i+) printf(请输入评判集 %d 的标准值:n,i+1);for(j=0;jMatrixCols;j+) scanf(%lf,&aij); printf(评判集标准值输出:

9、n);for(i=0;iMatrixRows;i+)for(j=0;jMatrixCols;j+) printf(%lf, ,aij);printf(n);printf(请输入出水点水样的值:n);for(i=0;iMatrixCols;i+)scanf(%lf,&bi); /for(i=0;iMatrixCols;i+) /计算权重数组 myweighti=EWeight(i,a,b);printf(输出一维数组权重值:n);for(j=0;jMatrixCols;j+) /输出权重一维数组 printf(%lfn,myweightj); /for(i=0;iMatrixRows;i+) /计算aMatrixRowsMatrixCols每一列中的四个数字排序(为计算隶属函数,隶属度准备)for(j=0;jMatrixCols;j+) mysortij=Sort(i,j,a);printf(输出aMatrixRowsMatrixCols每一列中的四个数字排序后的结果:n);for(i=0;iMatrixRows;i+) /输出aMatrixRowsMatrixCols每一列中的四个数字排序后的结果for(j=0;jMatrixCols;j+) printf(%lf, ,mysortij

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号