2022年五一数学建模竞赛C题

文章目录

  • 一、熵权法加TOPSIS
  • 二、sigmoid与arccot
  • 一、熵权法加TOPSIS

    为了防止我的遗忘,把代码放这里供大家参考

    % 第一列为可靠性,第二列为故障率
    Q_2 = [];
    
    % 对故障率进行正向化
    MAX = max(Q_2);
    Q_2_M = Q_2(:,1); 
    for i = 1:length(Q_2)
        Q_2_M(i,2) = abs(MAX(2)-Q_2(i,2)); 
    end
    
    % 标准化处理
    MIN = min(Q_2_M);
    MAX = max(Q_2_M);
    Q_2_MIAX = [];
    for i = 1:length(Q_2)
        Q_2_MIAX(i,1) = (Q_2_M(i,1)-MIN(1))/(MAX(1) - MIN(1));
        Q_2_MIAX(i,2) = (Q_2_M(i,2)-MIN(2))/(MAX(2) - MIN(2));
    end
    
    % 熵权法
    Z = Q_2_MIAX;
    [n,m] = size(Z);
    D = zeros(1,m);  % 初始化保存信息效用值的行向量
    for i = 1:m
        x = Z(:,i);  % 取出第i列的指标
        p = x / sum(x);
        % 注意,p有可能为0,此时计算ln(p)*p时,Matlab会返回NaN,所以要判断
        n = length(p);   % 向量的长度
        lnp = zeros(n,1);   % 初始化最后的结果
        for j = 1:n   % 开始循环
            if p(j) == 0   % 如果第i个元素为0
                lnp(j) = 0;  % 那么返回的第i个结果也为0
            else
                lnp(j) = log(p(j));
            end
        end
        %到这里结束
        e = -sum(p .* lnp) / log(n); % 计算信息熵
        D(i) = 1- e; % 计算信息效用值
    end
    W = D ./ sum(D);  % 将信息效用值归一化,得到权重
    W
    
    % TOPSIS
    D_min = min(Q_2_MIAX);
    D_max = max(Q_2_MIAX);
    
    zonghedefen = 1:13;  %生成记录点
    for i = 1:13
        %利用(C = D-/((D-)+(D+)))topsis模型与熵权进行结合
        D_jia = sqrt(W(1)*(Q_2_MIAX(i,1)-D_max(1))^2+W(2)*(Q_2_MIAX(i,2)-D_max(2))^2);
        D_jian = sqrt(W(1)*(Q_2_MIAX(i,1)-D_min(1))^2+W(2)*(Q_2_MIAX(i,2)-D_min(2))^2);
        zonghedefen(i) = D_jian/(D_jia+D_jian);
    end
    
    zonghedefen = zonghedefen'
    

    权重值的效果好像不太好,不管了,反正出出来了,哈哈哈哈哈~~~

    二、sigmoid与arccot

    队长让我出这种图

    为了完成任务,找函数图像
    找到sigmoidarccot差不多
    sigmoid


    因此,只需要稍作修改即可。
    关于怀疑那个,决定用cos函数,周期拉长,峰值调低即可
    Matlab代码如下

    x=linspace(-10.0,10.0);%定义自变量的取值
    y=1./(1+exp(-0.6*(x - 1.5)));%sigmoid函数 函数里一定要用点除‘./’,因为是矩阵运算,所以要把纬度保持一致。
    plot(x,y)%绘制图形
    xlabel('x')%添加横轴名称
    ylabel('y')%添加纵轴名称
    legend('sigmoid')%添加曲线标记符
    title('sigmoid')%给图像添加标题
    hold on
    
    x=linspace(-10.0,10.0);%定义自变量的取值
    y=1-(1./(1.0+exp(-0.7*(x + 1.5))));%sigmoid函数 函数里一定要用点除‘./’,因为是矩阵运算,所以要把纬度保持一致。
    plot(x,y)%绘制图形
    xlabel('x')%添加横轴名称
    ylabel('y')%添加纵轴名称
    legend('sigmoid')%添加曲线标记符
    title('sigmoid')%给图像添加标题
    hold on
    
    x=linspace(-10.0,10.0);%定义自变量的取值
    y = (1/3).*cos((1/5)*x);
    plot(x,y)%绘制图形
    hold off
    

    加上一点修改

    反正看上去效果还不错哈,哈哈哈,队长也很满意~~~~

    注意:如果你的Word发生吃字现象,那么insert被你无意中按了一下,再按下去就好了

    来源:光追雨

    物联沃分享整理
    物联沃-IOTWORD物联网 » 2022年五一数学建模竞赛C题

    发表评论