创意网站建设排行榜软件开发是啥
web/
2025/9/27 5:52:51/
文章来源:
创意网站建设排行榜,软件开发是啥,苏州专业做网站较好的公司有哪些,加盟网站需要怎么做由于层次分析法的最大缺点为#xff1a;主观性太强#xff0c;影响判断#xff0c;对结果有很大影响#xff0c;所以提出了熵权法修正。 变异程度方差/标准差。 如何度量信息量的大小#xff1a;
把不可能的事情变成可能#xff0c;这里面就有很多信息量。 概率越大主观性太强影响判断对结果有很大影响所以提出了熵权法修正。 变异程度方差/标准差。 如何度量信息量的大小
把不可能的事情变成可能这里面就有很多信息量。 概率越大信息量越少 信息熵的定义
所有概率相等的时候信息熵最大Hxln n
其中n指时间可能发生的种数 熵越大信息量越大还是越小
越小。 熵权法的计算步骤原理版
1.判断非负数如果存在负数需要进行标准化。 2.计算概率
公式意思每个元素/所在列的和 3计算信息熵ej信息效用值熵权。 熵权法背后的原理 MATLAB熵权法的操作:
代码操作的例子时博主之前一篇Topsis法数学建模——TOPSIS法_WeiYan的博客-CSDN博客最后河流水质的评价在最后加上了熵权法进行了优化。
参考代码
主函数
%% 第一步把数据复制到工作区并将这个矩阵命名为X
% 1在工作区右键点击新建CtrlN)输入变量名称为X
% 2在Excel中复制数据再回到Matlab中右键点击粘贴Excel数据CtrlShiftV
% 3关掉这个窗口点击X变量右键另存为保存为mat文件下次就不用复制粘贴了只需使用load命令即可加载数据
% 4注意代码和数据要放在同一个目录下哦。
clear;clc
load data_water_quality.mat%% 第二步判断是否需要正向化
[n,m] size(X);
disp([共有 num2str(n) 个评价对象, num2str(m) 个评价指标])
Judge input([这 num2str(m) 个指标是否需要经过正向化处理需要请输入1 不需要输入0 ]);if Judge 1Position input(请输入需要正向化处理的指标所在的列例如第2、3、6三列需要处理那么你需要输入[2,3,6] ); %[2,3,4]disp(请输入需要处理的这些列的指标类型1极小型 2中间型 3区间型 )Type input(例如第2列是极小型第3列是区间型第6列是中间型就输入[1,3,2] ); %[2,1,3]% 注意Position和Type是两个同维度的行向量for i 1 : size(Position,2) %这里需要对这些列分别处理因此我们需要知道一共要处理的次数即循环的次数X(:,Position(i)) Positivization(X(:,Position(i)),Type(i),Position(i));% Positivization是我们自己定义的函数其作用是进行正向化其一共接收三个参数% 第一个参数是要正向化处理的那一列向量 X(:,Position(i)) 回顾上一讲的知识X(:,n)表示取第n列的全部元素% 第二个参数是对应的这一列的指标类型1极小型 2中间型 3区间型% 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列% 该函数有一个返回值它返回正向化之后的指标我们可以将其直接赋值给我们原始要处理的那一列向量enddisp(正向化后的矩阵 X )disp(X)
end
%% 作业在这里增加是否需要算加权
% 补充一个基础知识m*n维的矩阵A 点乘 n维行向量B等于这个A的每一行都点乘B
% 注意2017以及之后版本的Matlab才支持老版本Matlab会报错
% % 假如原始数据为
% A[1, 2, 3;
% 2, 4, 6]
% % 权重矩阵为
% B[ 0.2, 0.5 ,0.3 ]
% % 加权后为
% CA .* B
% 0.2000 1.0000 0.9000
% 0.4000 2.0000 1.8000
% 类似的还有矩阵和向量的点除 大家可以自己试试计算A ./ B
% 注意矩阵和向量没有 .- 和 . 哦 大家可以试试如果计算A.B 和 A.-B会报什么错误。%% 这里补充一个小插曲
% % 在上一讲层次分析法的代码中我们可以优化以下的语句
% % Sum_A sum(A);
% % SUM_A repmat(Sum_A,n,1);
% % Stand_A A ./ SUM_A;
% % 事实上我们把第三行换成Stand_A A ./ Sum_A; 也是可以的哦
% % (再次强调新版本的Matlab才能运行哦)%% 第三步对正向化后的矩阵进行标准化
Z X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp(标准化矩阵 Z )
disp(Z)%% 让用户判断是否需要增加权重
disp(请输入是否需要增加权重向量需要输入1不需要输入0)
Judge input(请输入是否需要增加权重 );
if Judge 1Judge input(使用熵权法确定权重请输入1否则输入0 );if Judge 1if sum(sum(Z0)) 0 % 如果之前标准化后的Z矩阵中存在负数则重新对X进行标准化disp(原来标准化得到的Z矩阵中存在负数所以需要对X重新标准化)for i 1:nfor j 1:mZ(i,j) [X(i,j) - min(X(:,j))] / [max(X(:,j)) - min(X(:,j))];endenddisp(X重新进行标准化得到的标准化矩阵Z为: )disp(Z)endweight Entropy_Method(Z);disp(熵权法确定的权重为)disp(weight)elsedisp([如果你有3个指标你就需要输入3个权重例如它们分别为0.25,0.25,0.5, 则你需要输入[0.25,0.25,0.5]]);weight input([你需要输入 num2str(m) 个权数。 请以行向量的形式输入这 num2str(m) 个权重: ]);OK 0; % 用来判断用户的输入格式是否正确while OK 0 if abs(sum(weight) -1)0.000001 size(weight,1) 1 size(weight,2) m % 注意Matlab中浮点数的比较要小心OK 1;elseweight input(你输入的有误请重新输入权重行向量: );endendend
elseweight ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同即都为1/m
end%% 第四步计算与最大值的距离和最小值的距离并算出得分
D_P sum([(Z - repmat(max(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5; % D 与最大值的距离向量
D_N sum([(Z - repmat(min(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5; % D- 与最小值的距离向量
S D_N ./ (D_PD_N); % 未归一化的得分
disp(最后的得分为)
stand_S S / sum(S)
[sorted_S,index] sort(stand_S ,descend)% A magic(5) % 幻方矩阵
% M magic(n)返回由1到n^2的整数构成并且总行数和总列数相等的n×n矩阵。阶次n必须为大于或等于3的标量。
% sort(A)若A是向量不管是列还是行向量默认都是对A进行升序排列。sort(A)是默认的升序而sort(A,descend)是降序排序。
% sort(A)若A是矩阵默认对A的各列进行升序排列
% sort(A,dim)
% dim1时等效sort(A)
% dim2时表示对A中的各行元素升序排列
% A [2,1,3,8]
% Matlab中给一维向量排序是使用sort函数sortA排序是按升序进行的其中A为待排序的向量
% 若欲保留排列前的索引则可用 [sA,index] sort(A,descend) 排序后sA是排序好的向量index是向量sA中对A的索引。
% sA 8 3 2 1
% index 4 3 1 2 因为matlab中的logln且log0-∞所以写了个函数放着出现-∞
自定义函数 mylog
% 重新定义一个mylog函数当输入的p中元素为0时返回0
function [lnp] mylog(p)
n length(p); % 向量的长度
lnp zeros(n,1); % 初始化最后的结果for i 1:n % 开始循环if p(i) 0 % 如果第i个元素为0lnp(i) 0; % 那么返回的第i个结果也为0elselnp(i) log(p(i)); endend
end
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81230.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!