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