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

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

一、熵权法加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


队长让我出这种图

0a2653c851af460fa595bd959398a8f1.png

为了完成任务,找函数图像

找到sigmoid和arccot差不多

sigmoid


2d65d23f6d4748949b924e4057485923.png2e9b90b2ca334476abebe75bafe6eeaa.png


因此,只需要稍作修改即可。

关于怀疑那个,决定用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


加上一点修改


0a2653c851af460fa595bd959398a8f1.png


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


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


相关文章
|
测试技术 数据库
牛客竞赛每日俩题 - Day12
牛客竞赛每日俩题 - Day12
牛客竞赛每日俩题 - Day9
牛客竞赛每日俩题 - Day9
|
算法
牛客竞赛每日俩题 - Day14
牛客竞赛每日俩题 - Day14
|
容器
牛客竞赛每日俩题 - Day10
牛客竞赛每日俩题 - Day10
|
数据采集 机器学习/深度学习 算法
数学建模:赛前准备
数学建模:赛前准备
70 0
数学建模比赛
数学建模比赛
77 0
数学建模比赛
|
人工智能 BI
牛客竞赛每日俩题 - Day4
牛客竞赛每日俩题 - Day4
109 0
牛客竞赛每日俩题 - Day4
牛客竞赛每日俩题 - Day1
牛客竞赛每日俩题 - Day1
牛客竞赛每日俩题 - Day7
牛客竞赛每日俩题 - Day7