如何利用matlab写topsis程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用matlab写topsis程序相关的知识,希望对你有一定的参考价值。

参考技术A function [ output_args ] = TOPSIS( A,W,M,N )
%topsis法,指标归一化采用向量归一化法,即正负指标均存在
%A为决策矩阵,W为权值矩阵,M为正指标所在的列,N为负指标所在的列
[ma,na]=size(A);
A=xiangliangguiyi(A); %用向量归一化法得到[标准决策矩阵]
for i=1:na
B(:,i)=A(:,i)*W(i); %按列循环得到[加权标准化矩阵]
end
V1=zeros(1,na); %初始化理想解和负理想解
V2=zeros(1,na);
BMAX=max(B); %取加权标准化矩阵每列的最大值和最小值
BMIN=min(B); %
for i=1:na
if i<=size(M,2) %循环得到理想解和负理想解,注意判断,不然会超个数
V1(M(i))=BMAX(M(i));
V2(M(i))=BMIN(M(i));
end
if i<=size(N,2)
V1(N(i))=BMIN(N(i));
V2(N(i))=BMAX(N(i));
end
end

for i=1:ma %按行循环求各方案的贴近度
C1=B(i,:)-V1;
S1(i)=norm(C1); %S1,S2分别为离正理想点和负理想点的距离,用二阶范数
可求
C2=B(i,:)-V2;
S2(i)=norm(C2);
T(i)=S2(i)/(S1(i)+S2(i)); %T为贴近度
end
A
B

V1

V2
S1
S2
T本回答被提问者采纳

Matlab数学建模TOPSIS(优劣解距离法)

一、问题引入

  先分析一下层次分析法的不足。

  ① 平均随机一致性指标RI的表格中,n最大为15。那么n太大的话,无法进行一致性检验。

  ② 如果决策层中指标的数据是已知的,那么我们如何利用这些数据来使得评价的更加准确呢?

二、极大型指标构造计算评分

  ① 第一步:求最大最小值。

  ② 第二步:带入构造计算评分的公式 x − m i n m a x − m i n \\fracx - minmax - min maxminxmin

  ③ 第三步:进行归一化。

  代码演示:

function res = func(a)
	mnmx = minmax(a);
	res = (a - mnmx(1)) / (mnmx(2) - mnmx(1));
	res = res / sum(res);
end

  (注:上面的评分规则是不正确的,只是用来抛砖引玉,正确的评分规则见下文“三、标准化”)

  但是有时候评分不是越大越好,而是越小越好,或者越接近某个值越好,越接近某个区间越好。那就要把这些指标转换成极大型。这个过程叫做正向化。

  但是不同指标的量纲是不一样的,为了消除量纲带来的影响,我们需要进行标准化。

  下面先介绍标准化,在介绍正向化。

三、标准化

  例如对于m个要评价的对象,n个评价指标的正向化矩阵:
X = ( x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 ⋯ x m n ) X = \\beginpmatrix x_11 & x_12 & \\cdots & x_1n\\\\ x_21 & x_22 & \\cdots & x_2n\\\\ \\vdots & \\vdots & \\ddots & \\vdots\\\\ x_m1 & x_m2 & \\cdots & x_mn \\endpmatrix X=x11x21xm1x12x22xm2x1nx2nxmn
  将标准化后的矩阵记作Z,则Z中的每一个元素满足:
z i j = x i j ∑ i = 1 m x i j 2 z_ij = \\fracx_ij\\sqrt\\sum\\limits^m_i=1x^2_ij zij=i=1mxij2 xij
  用代码描述为:

function Z = func(X)
	[m, ~] = size(X);
	Z = X ./ repmat(sum(X .^ 2) .^ 0.5, m, 1);
end

  接下来对标准化矩阵求解各指标得分:
Z = ( z 11 z 12 ⋯ z 1 n z 21 z 22 ⋯ z 2 n ⋮ ⋮ ⋱ ⋮ z m 1 z m 2 ⋯ z m n ) Z = \\beginpmatrix z_11 & z_12 & \\cdots & z_1n\\\\ z_21 & z_22 & \\cdots & z_2n\\\\ \\vdots & \\vdots & \\ddots & \\vdots\\\\ z_m1 & z_m2 & \\cdots & z_mn \\endpmatrix\\\\ Z=z11z21zm1z12z22zm2z1nz2nzmn
令 Z j + = max ⁡ ( z 1 j , z 2 j , ⋯   , z m j ) Z j − = min ⁡ ( z 1 j , z 2 j , ⋯   . z m j ) 令Z^+_j = \\max(z_1j, z_2j, \\cdots, z_mj)\\\\ Z^-_j = \\min(z_1j, z_2j, \\cdots. z_mj)\\\\ Zj+=max(z1j,z2j,,zmj)Zj=min(z1j,z2j,.zmj)
D + = ( Z 1 + , Z 2 + , ⋯   , Z j + ) D − = ( Z 1 − , Z 2 − , ⋯   , Z j − ) D^+ = (Z^+_1, Z^+_2, \\cdots, Z^+_j)\\\\ D^- = (Z^-_1, Z^-_2, \\cdots, Z^-_j)\\\\ D+=(Z1+,Z2+,,Zj+)D=(Z1,Z2,,ZMatlab数学建模TOPSIS(优劣解距离法)

如何搞定熵权topsis?

如何在matlab中利用函数的递归调用求n!

spssau数据处理难度

数学建模MATLAB应用实战系列(九十)-TOPSIS法应用案例(附MATLAB和Python代码)

数学建模评价类——Topsis模型