数学建模
熵权法仅是用于客观确定权重的方法
层次分析法
层次分析法上机
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)fori=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));endenddisp('所有的数据均已完成正向化!')end%% 标准化disp('***************正在进行标准化...***************');[n,m]=size(X)% 先检查有没有负数元素
isNeg =0;fori=1:n
forj=1: m
if(X(i,j)<0)
isNeg =1;break;endendendif(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 =[]fori=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模型
时间序列(量化方向常用)
- 逆天了孩子,怎么这么难我去,不想往下看了,等必要的时候再来补吧~~
聚类分析
Kmeans算法网站1
Kmeans算法网站2
DBSCAN聚类算法网站
版权归原作者 隔壁的小公举 所有, 如有侵权,请联系我们删除。