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
队长让我出这种图
为了完成任务,找函数图像
找到sigmoid
和arccot
差不多
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
被你无意中按了一下,再按下去就好了
来源:光追雨