数学建模.Topsis优劣解距离法代码部分

这里的代码时在学习清风老师的课后自己写的,可能没有清风老师写的那么高级,但是对于小白来说应该是挺友好的啦!啦啦啦!

1.正向化:

X=[1 2 3;1 2 3;2 3 4];
[r,l]=size(X);
lie=input('想对哪一列进行处理:例如:对1 2 3 列处理,则输入[1 2 3]');
Type=input('写出类型 (1)极小型(2)中间型(3)区间型 例如[1 2 3]');
for i=1:l
    if Type(i)==1
        X(:,i)=repmat(max(X(:,i)),r,1)-X(:,i)

    end
    if Type(i)==2
        best=input('请输入最佳值')
        M=max(abs(X(:,i)-repmat(best,r,1)))
        X(:,i)=ones(r,1)-(X(:,i)-repmat(best,r,1))./M
    end
    if Type(i)==3
        a=input('输入最佳区间的上界:')
        b=input('输入最佳区间的下界:')
        M=max(a-min(X(:,i)),max(X(:,i))-b)
        for j=1:r
            if X(j,i)<a
                X(j,i)=1-(a-X(j,i))/M
            
            elseif X(j,i)>b
                X(j,i)=1-(X(j,i)-b)/M
            
            else
                X(i,j)=1
             end
        end
    end

end
disp (X)

2.标准化

disp ('正向化后的矩阵为:X=')
disp(X)

Z = X ./ repmat(sum(X.*X) .^ 0.5, r, 1);
disp('标准化矩阵 Z = ')
disp(Z)

3.计算得分并归一化

Zmax=sum((Z-repmat(max(Z),r,1)).^2 ,2).^1/2
 
Zmin=sum((Z-repmat(min(Z),r,1)).^2 ,2).^1/2
S = Zmin ./ (Zmin+Zmax);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S);
[sorted_S,index] = sort(stand_S ,'descend');
disp(stand_S)

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值