文章目錄
- 步驟一:讀數據
- 步驟二:指標正向化
- 步驟三:數據標準化
- 步驟三:數據標準化
- 步驟四:結果處理
步驟一:讀數據
步驟一:讀數據
X = xlsread(‘blind date.xlsx’); % 讀取Excel文件中的相親數據
詳細說明:
該命令會自動讀取Excel文件"blind date.xlsx"中的所有數值數據
讀取的數據會存儲在矩陣變量X中
如果Excel文件中包含多個工作表,默認讀取第一個工作表的數據
可以指定特定工作表讀取,例如:xlsread(‘blind date.xlsx’,‘Sheet2’)
該函數會忽略Excel文件中的文本和格式,只讀取數值數據
步驟二:指標正向化
- 三類指標轉換為極大型
- 極小型:數值越小越好
- 極小型轉極大型
X(:,vec(i)) = Min2Max(X(:,vec(i)));%極小型轉為極大型
[[極小MinMax講解]]
2. 中間型:越接近某個值越好
1. 中間型轉極大型
best = input('請輸入中間型的最好值:\n');%用戶需要最好的數值temp = X(:,vec(i));X(:,vec(i)) = Mid2Max(X(:,vec(i)), best);
[[中間MidMax講解]]
1. 區間型:落在某個區間越好
1. 區間型轉最大型
1. arr = input('請輸入最佳區間,按照“[a,b]”的形式輸入:\n');X(:,vec(i)) = Int2Max(X(:,vec(i)), arr(1), arr(2));
[[區間Int2Max]]
輸入:[[正向化輸入]]
步驟三:數據標準化
- 獲取規模
disp('***************正在進行標準化...***************');[n,m] = size(X);
- [[檢查負數元素]]
% 檢查有沒有負數元素isNeg = 0;for i = 1 : nfor j = 1 : mif(X(i,j) < 0)isNeg = 1;break;endendendif (isNeg == 0)%沒有負數squere_X = (X.*X);sum_X = sum(squere_X,1).^0.5; %按列求和,再開方stand_X = X./repmat(sum_X, n, 1);elsemax_X = max(X,[],1); %按照列找出最大元素min_X = min(X,[],1); %按照列找出最小元素stand_X = X - repmat(min_X,n,1) ./ (repmat(max_X,n,1) - repmat(min_X,n,1));enddisp('標準化完成!')
步驟三:數據標準化
步驟四:結果處理
- 確定虛擬供應商
- 最大虛擬供應商置于最后一列
- 使用zeros(m,n-1)創建m行n-1列的0矩陣
- 將結果歸一化
res_topsis = S ./ sum(S)%xlswrite('res_topsis.xlsx',res_topsis) %寫入excel文檔%disp('已完成打分,請到當前目錄下res_topsis.xlsx文件中取出結果!')