二 優劣距離法(Topsis方法)

2021-10-07 20:17:27 字數 3129 閱讀 1000

main函式

%%第一步:把資料複製到工作區,將這個矩陣命名為x

%**mat檔案和程式在乙個資料夾下,可以用load函式載入資料

clear;clc

load data_water_quality.mat

%%第二步,判斷是否需要正向化

[n,m]=size(x);

disp('共有' num2str(n) '個評價物件,'num2str(m) '個評價指標')

judge=input('這'num2str(m) '個指標是否需要經過正向化處理,如果需要請輸入1,不需要請輸入0: ');

if judge==1

posion=input('請輸入需要正向化處理的指標所在的列,例如第2、3、6列需要處理,那麼你需要輸入[2,3,6]: ');%[2,3,4]

disp('請輸入需要處理的這些列的指標型別(1:極小型,2:中間型,3:區間型)')

type=input('例如:第2列是極小型,第3列是區間型,第6列是中間型,就輸入[1,2,3]: ');%[1,2,3]

%注意,position和type是兩個同緯度的行向量

for i=1:size(positon,2) %這裡需要對這些列分別處理,因此我們需要知道一共要處理的次數

x(:,position(i))=positivization(x(:,position(i),type(i),position(i)));

%positivization是自定義函式,作用是正向化

%第乙個引數是需要正向化處理的那一列向量,

%第二個引數是對應的指標型別

%第三個引數是正在處理的是原始矩陣中的哪一列

%函式的返回值直接幅值給x,輸出的數為正向化之後的數

enddisp('正向化後的矩陣x= ')

disp(x)

end

%%第三步,對正向化後的矩陣進行標準化

z=x./repmat(sum(x.*x).^0.5,n,1);

disp('標準化矩陣z=')

disp(z)

%%第四步,計算與最大值的距離和最小值的距離,並算出得分

d_p=sum([(z-repmat(max(z),n,1)).^2],2).^0.5 %d+ 與最大值的距離向量

%sum(,1)代表按列求和, sum(,2)代表按行求和

d_n=sum([(z-repmat(min(z),n,1)).^2],2).^0.5 %d- 與最小值的距離向量

s=d_n./(d_p+d_n); %未歸一化得分

disp('最後的得分為:');

stand_s=s/sum(s);

[stord_s,index]=sort(stand_s,'descend')

%幻方矩陣magic(),每一列的和都相等

%排序函式sort(a,1),以列來排序,預設公升序sort(a,2),以行sort(a,'descend')進行降序排序

%排序之後要得到索引[sorted,index]=sort(stand_s,'descend')

positivization函式

function [posit_x]=positivization(x,type,i)

%輸入變數有三個:

%x是需要正向化處理的原始的列向量

%type:指標的型別(1:極小型,2:中間型,3:區間型)

%i:正在處理的是原始矩陣中的哪一列

%posit_x表示正向化後的列向量

if type==1 %極小型

disp('第',num2str(i),'列是極小型,正在正向化')

posit_x=min2max(x);%呼叫min2max函式來正向化

disp('第',num2str(i),'列極小型正向化處理完成')

disp('~~~~~~~~~~~~~~~~~~~~分界線~~~~~~~~~~~~~~~~~~~')

elseif type==2 %中間型

disp('第',num2str(i),'列是中間型')

best=input('請輸入最佳的那乙個值: ');

posit_x=mid2max(x,best);%呼叫mid2max函式來正向化

disp('第',num2str(i),'列中間型正向化處理完成')

disp('~~~~~~~~~~~~~~~~~~~~分界線~~~~~~~~~~~~~~~~~~~')

elseif type==3 %中間型

disp('第',num2str(i),'列是區間型')

a=input('請輸入區間的下界: ');

b=input('請輸入區間的上界: ');

posit_x=inter2max(x,a,b);%呼叫inter2max函式來正向化

disp('第',num2str(i),'列區間型正向化處理完成')

disp('~~~~~~~~~~~~~~~~~~~~分界線~~~~~~~~~~~~~~~~~~~')

else

disp('如果沒有這種型別的指標,請檢查type向量中是否有除了1、2、3之外的其他值')

endend

min2max函式

function [posit_x]=min2max(x)

posit_x=max(x)-x;

end

mid2max函式

function [posit_x]=mid2max(x,best)

m=max(abs(x-best));

posit_x=1-abs(x-best)/m;

end

inter2max函式

function [posit_x]=inter2max(x,a,b)

r_x=size(x,1);%x的行數

m=max(a-min(x),max(x)-b);

posit_x=zeros(r_x,1);

%初始化posit_x全為0

for i=1:r_x

if x(i)b

posit_x(i)=1-(x(i)-b)/m;

else

posit_x(i)=1;

endend

end

數學建模 Topsis法(優劣解距離法)

topsis 法是一種常用的組內綜合評價方法,能充分利用原始資料的資訊,其結果能精確地反映各評價方案之間的差距。基本過程為基於歸一化後的原始資料矩陣,採用余弦法找出有限方案中的最優方案和最劣方案,然後分別計算各評價物件與最優方案和最劣方案間的距離,獲得各評價物件與最優方案的相對接近程度,以此作為評價...

評價類問題 之 優劣解距離法(TOPSIS)

topsis法 technique for order preference by similarity to ideal solution 可翻譯為逼近理想解排序法,國內常簡稱為優劣解距離法topsis 法是一種常用的綜合評價方法,其能充分利用原始資料的資訊,其結果能精確地反映各評價方案之間的差距...

數學建模之優劣解距法(TOPSIS)

優劣解距法簡稱topsis,是一種綜合評價方法,利用原始資料反映各評價方案之間的差距 優劣解距法的步驟通常為 先將原始資料針具做正向化處理,得到正向化矩陣 再對正向化矩陣標準化處理以消除各指標綱量的影響 在有限方案中找到最優方案和最劣方案,計算各評價物件與最優最劣方案間的距離 例如 請依據以下四位同...