数学建模
熵权法仅是用于客观确定权重的方法
层次分析法
层次分析法上机
matlab速学
https://ww2.mathworks.cn/help/?s_tid=gn_supp
算数平均法求权重
n=3;
A=[1,2,5;1/2,1,2;1/5,1/2,1];
Sum_A=sum(A);
SUM_A=repmat(Sum_A,n,1);
Stand_A=A./SUM_A;
wl=sum(Stand_A,2)./n;
特征法求权重
n=3;
A=[1,2,5;1/2,1,2;1/5,1/2,1];
[V,D]=eig(A);
Max_eig=max(max(D));%D
[r,c]=find(D == Max_eig,1);
w2=V(:,c)./sum(V(:,c));
CI=(Max_eig-n)/(n-1);
%RI=0.52;需查表
CR=CI/RI;
若CR<0.10 则通过了一致性检验
模糊综合评价
一级模糊综合评价
评语集带有评价色彩型
评语集不带有评价色彩型
多级模糊综合评价
总结
模糊综合评价上机
`matlab下标从1开始!!!!
熵权法(客观
)
长相:区间型指标
总结
熵权法上机
TOPSIS(客观)
法一:距离法
法二:优劣解
引入权重,因为上述没有引入权重
topsis上机
%clear;clc;
%X = [89,1; 60,3; 74,2; 99,0]
%X=[99;100;98;97]
%X=[0.030;0.028;0;0.007]
%X=[99,0.030;100,0.028;98,0;97,0.007]
%X=[99,0.010;100,0.012;98,0.040;97,0.033]
%X = [35.2;35.8;36.5;37.2;38.0]
%X = [0.6;0.75;0.89;0.95]
%X = [180;175;170;185;190]
%X = [60;90;95;81;79]
X = xlsread('工作簿1.xlsx');
%% 正向化
disp('***************正在进行正向化...***************');
vec = input('请输入要正向化的向量组,请以数组的形式输入,如[1 2 3]表示1,2,3列需要正向化,不需要正向化请输入-1\n') %注意输入函数这里是单引号
if (vec ~= -1)
for i = 1 : size(vec,2)
flag = input(['第' num2str(vec(i)) '列是哪类数据(【1】:极小型 【2】:中间型 【3】:区间型),请输入序号:\n']);
if(flag == 1)%极小型
X(:,vec(i)) = Min2Max(X(:,vec(i)));
elseif (flag == 2) % 注意这里的else和if是连在一起的
best = input('请输入中间型的最好值:\n');
temp = X(:,vec(i));
X(:,vec(i)) = Mid2Max(X(:,vec(i)), best);
elseif (flag == 3)
arr = input('请输入最佳区间,按照“[a,b]”的形式输入:\n')
X(:,vec(i)) = Int2Max(X(:,vec(i)), arr(1), arr(2));
end
end
disp('所有的数据均已完成正向化!')
end
%% 标准化
disp('***************正在进行标准化...***************');
[n,m] = size(X)
% 先检查有没有负数元素
isNeg = 0;
for i = 1:n
for j = 1 : m
if(X(i,j) < 0)
isNeg = 1;
break;
end
end
end
if (isNeg == 0)
squere_X = (X.*X)
sum_X = sum(squere_X,1).^0.5 %按列求和,再开方
stand_X = X./repmat(sum_X, n, 1)
else
max_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));
end
%% (法一)用距离法打分
disp('***************正在用距离法打分...***************');
max_x = max(stand_X,[], 1) %按照列找出最大元素
min_x = min(stand_X,[], 1) %按照列找出最小元素
(stand_X - repmat(min_x,n,1)) ./ (max_x - min_x)
%% (法二)用优劣解打分
disp('***************正在用优劣解打分...***************');
tmp = ones(m);% 这个矩阵很有用,要掌握哦
w_j = tmp(:,1);
is_need_w = input('是否需要指定权值,如需要请输入1,否则请输入0:\n');
if (is_need_w == 1)
w_j = input('请按列输入各指标的权值:(如[0.1;0.2;0.3;0.4])')
end
Z_plus = repmat(max_x,n,1);
Z_sub = repmat(min_x,n,1);
D_plus = sum(((stand_X - Z_plus).^2) * w_j, 2).^0.5 %注意是按行求和
D_sub = sum(((stand_X - Z_sub)).^2 * w_j, 2).^0.5
S = D_sub ./ (D_sub + D_plus)
%将结果归一化
res_topsis = S ./ sum(S)
%xlswrite('res_topsis.xlsx',res_topsis) %写入excel文档
%disp('已完成打分,请到当前目录下res_topsis.xlsx文件中取出结果!')
灰色关联分析
例子:结婚率,目标为找出最大影响因素
定义
步骤
灰色关联分析用于综合评价(不推荐)
先正向化+标准化,然后找出每行最大值,作为虚拟供应商,该列就是母序列,1~6供应商为子序列。得出主要影响母序列的子序列,即为最佳供应商
线性规划
整数线性规划
若为01整数规划,则只需将lb为0,ub为1
非线性规划(最高阶不为1次)
图论与最短路径算法
旅行商问题(TSP)
插值算法
上机
拟合算法(不需要经过所有点,与插值算法不同)
当拟合函数为线性
实际操作
用matlab -> app -> curve fitting tool拟合
例题
%% 黄河小浪底调水调沙问题
%save('water.mat','water')
load('water.mat')
load('sand.mat')
t = []
for i = 1 : 24
t = [t 3600*(12*i - 4)];
end
total_sand = sand .* water; %排沙量
pp = spline(t,total_sand); %返回三次样条插值结果
f = @(t) ppval(pp,t);% 定义了一个匿名函数f,该函数使用ppval函数计算分段多项式的值。
% 这个匿名函数可以作为被积函数传递给MATLAB的integral函数,从而计算分段多项式的积分。
q = integral(f,t(1),t(24));% 被积函数、积分上下限
% 绘图看一看
subplot(1,2,1)
plot(water(1:11),total_sand(1:11),'*')
xlabel('水流量');
ylabel('排沙量');
title('第一阶段')
subplot(1,2,2)
plot(water(12:24),total_sand(12:24),'*')
xlabel('水流量');
ylabel('排沙量');
title('第二阶段');
% 拟合
x1 = water(1:11);
y1 = total_sand(1:11);
x2 = water(12:24);
y2 = total_sand(12:24);
微分方程
例子
常见微分方程模型-SI模型
时间序列(量化方向常用)
- 逆天了孩子,怎么这么难我去,不想往下看了,等必要的时候再来补吧~~
聚类分析