Matlab学习系列19. 熵值法确定权重

Matlab学习系列19. 熵值法确定权重
Matlab学习系列19. 熵值法确定权重

19. 熵值法确定权重

一、基本原理

在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。 根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。

二、熵值法步骤

1. 选取n 个国家,m 个指标,则x ij 为第i 个国家的第j 个指标的数值(i =1,2…,n ; j =1,2,…,m );

2. 指标的归一化处理:异质指标同质化

由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令ij ij x x =,从而解决各项不同质指标值的同质化问题。而且,由于

正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。其具体方法如下:

正向指标:

12'1212min{,,...,}

max{,,...,}min{,,...,}ij j j nj ij j j nj j j nj x x x x x x x x x x x -=-

负向指标:

12'1212max{,,...,}max{,,...,}min{,,...,}j j nj ij

ij j j nj j j nj x x x x x x x x x x x -=-

则'ij x 为第i 个国家的第j 个指标的数值(i =1,2…,n ; j =1,2,…,m )。为

了方便起见,归一化后的数据'ij x 仍记为x ij ;

3. 计算第j 项指标下第i 个国家占该指标的比重:

1

, 1,2...,, 1,2 (i)

ij n ij i x p i n j m x

====∑

4. 计算第j 项指标的熵值:

1ln()n

j ij ij i e k p p ==-∑

其中,k =1/ln(n )>0. 满足e j ≥0;

5. 计算信息熵冗余度:

1j j d e =-;

6. 计算各项指标的权值:

1

, 1,2,...,j

j m j j d w j m d

===∑

7. 计算各国家的综合得分:

1, 1,2,...m

i j ij j s w p i n ==?=∑

三、Matlab 实现

按上述算法步骤,编写Matlab 函数:shang.m

function [s,w]=shang(x)

%函数shang(), 实现用熵值法求各指标(列)的权重及各数据行的得分

% x为原始数据矩阵, 一行代表一个国家, 每列对应一个指标

% s返回各行得分,w返回各列权重

[n,m]=size(x); % n=23个国家, m=5个指标

%%数据的归一化处理

% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可

[X,ps]=mapminmax(x');

ps.ymin=0.002; %归一化后的最小值

ps.ymax=0.996; %归一化后的最大值

ps.yrange=ps.ymax-ps.ymin; %归一化后的极差,若不调整该值, 则逆运算会出错

X=mapminmax(x',ps);

% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据

X=X';%为归一化后的数据, 23行(国家), 5列(指标)

%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)

for i=1:n

for j=1:m

p(i,j)=X(i,j)/sum(X(:,j));

end

end

%%计算第j个指标的熵值e(j)

k=1/log(n);

for j=1:m

e(j)=-k*sum(p(:,j).*log(p(:,j)));

end

d=ones(1,m)-e;%计算信息熵冗余度

w=d./sum(d);%求权值w

s=w*p';% 求综合得分

程序测试,现有数据如下:(存为data.txt)114.6 1.1 0.71 85.0 346

55.3 0.96 0.4 69.0 300

132.4 0.97 0.54 73.0 410

152.1 1.04 0.49 77.0 433

103.5 0.96 0.66 67.0 385

81.0 1.08 0.54 96.0 336

179.3 0.88 0.59 89.0 446

29.8 0.83 0.49 120.0 289

92.7 1.15 0.44 154.0 300

248.6 0.79 0.5 147.0 483

115.0 0.74 0.65 252.0 453

64.9 0.59 0.5 167.0 402

163.6 0.85 0.58 220.0 495

95.7 1.02 0.48 160.0 384

139.5 0.70 0.59 217.0 478

89.9 0.96 0.39 105.0 314

76.7 0.95 0.51 162.0 341

121.8 0.83 0.60 140.0 401

42.1 1.08 0.47 110.0 326

78.5 0.89 0.44 94.0 280

77.8 1.19 0.57 91.0 364

90.0 0.95 0.43 89.0 301

100.6 0.82 0.59 83.0 456

执行代码:

x=load('data.txt'); % 读入数据

[s,w]=shang(x)

运行结果:

s = Columns 1 through 9

0.0431 0.0103 0.0371 0.0404 0.0369 0.0322 0.0507 0.0229 0.0397

Columns 10 through 18

0.0693 0.0878 0.0466 0.0860 0.0503 0.0800 0.0234 0.0456 0.0536

Columns 19 through 23

0.0272 0.0181 0.0364 0.0202 0.0420

w = 0.1660 0.0981 0.1757 0.3348 0.2254

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

Excel-wps中熵值法、熵权法、指标赋权、权重计算。

Excel -wps 中熵值法、熵权法、指标赋权、权重计算。 Excel 、wps 实现熵权法计算过程: 1.熵权法下指标权重的计算 熵权法下首先计算第i 年份的第j 项指标值的权重: i=1,2,3…n; j=1,2,3…m (2) 令k=1/ln(n)>0,为调节系数,计算指标信息熵: i=1,2,3…n; j=1,2,3…m (3) 最后确定计算指标权重: (0

Excel-wps中熵值法、熵权法、指标赋权、权重计算。 6 2003 0.1710 0.1261 7 2004 0.2852 0.1465 8 2005 0.3170 0.1291 9 2006 0.6475 0.2121 10 2007 0.6475 0.2803 11 2008 0.562183898 0.403750964 12 2009 0.585203446 0.588585521 13 2010 0.694865622 0.465106715 14 2011 0.500221291 0.472249607 15 2012 1 0.602993026 16 2013 0.863566837 0.558954944 17 2014 0.835655753 0.523401776 18 2015 0.193615668 0.586089558 19 2016 0.52105526 1.000347255 20 =SUM(B1:B19) =SUM(C1:C19) 21 pij =B1/B$20 =C1/C$20 下拉后得到19 行新数据

汽车系统动力学Matlab

汽车系统动力学Matlab 作业报告 小组成员:

'组内任务分配

二、 Matlab 程序与图形 1、不同转向特性车辆在不同车速下的系统特征根 m=1000;I=1500;a1=1.15;b1=1.35;Caf=53000;Car=53000; i=1;R=[]; for uc=10:5:100; D=(l*(Caf+Car)+m*(a1^2*Caf+b1^2*Car))∕(m*l*uc); S=(a1+b1)^2*Caf*Car∕(m*l*uc^2)+(b1*Car-a1*Caf)∕l; P=[1 D S]; r=roots(P); R(i,1)=r(1,1);R(i,2)=r(2,1);i=i+1; end plot(real(R(:,1)),imag(R(:,1)),'bo'); hold a2=1.25; b2=1.25; t=1; S=[]; for uc=10:5:100 P=[m 0;0 l]; Q=[(Caf+Car)∕uc,m*uc+(a2*Caf-b2*Car)∕uG(a2*Caf-b2*Car)∕uc,(a2^2*Caf+b 2^2*Car)∕uc]; R=[Caf;a2*Caf]; A=-P^(-1)*Q; d=eig(A); i=imag(d); r=real(d); S(t,1)=r(1); S(t,2)=i(1); t=t+1; end plot(S(:,1),S(:,2),'*') a3=1.35; b3=1.15; for uc=10:5:100 P=[m 0;0 l];

Q=[(Caf+Car)∕uc,m*uc+(a3*Caf -b3*Car)∕uc; (a3*Caf-b3*Car)∕uc,(a3^2*Caf+b3^2*Car)∕uc]; R=[Caf;a3*Caf]; A=-P^(-1)*Q; d=eig(A); i=imag(d); r=real(d); S(t,1)=r(1); S(t,2)=i(1); t=t+1; end grid On Plot(S(:,1),S(:,2),'d'); axis([-14 2 0 3]); xlabel('实轴(Re)'); ylabel('虚轴(Im)'); text(-8,2.8,'不足转向'); text(0,0.2,'过多转向'); text(-3,0.2,'中性转向') set(gca,'Fo ntName','Helvetica','Fo ntSize',10) title(['不同转向特性车辆在不同车速下的系统特征根'],'FontSize',12); E 一 書不同转向特杵乍辆在不同乍速下的系统待征戕

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形') M=5 %每行的方格数,改变M可以方便地改变剖分的点数 u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵 disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。') disp('对边界内的点赋初值并使用边界条件对边界赋值:') for j=1:M-1 for i=1:M-1 u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值 end end for i=1:M+1 u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值 u(1,M+1)=0; end u tic %获取运行时间的起点 disp('迭代次数为N') N=6 %迭代次数,改变N可以方便地改变迭代次数 disp('n为当前迭代次数,u为当前值,结果如下:') for n=1:N for p=2:M i=M+2-p; for j=2:M u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法 end end n %输出n u %输出u end disp('所用的时间:') t=toc %获取算法运行需要的时间 [x,y]=meshgrid(0:1/M:1,0:1/M:1); z=u(1,:); for a=2:M+1 z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值 end mesh(x,y,z)%绘制三维视图以便清楚地显示结果 mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。 (2)学会用Matlab 编写各种方法求解线性方程组的程序。 1.2 实验题目: 1. 用列主元消去法解方程组: 1241234 123412343421233234x x x x x x x x x x x x x x x ++=??+-+=??--+=-??-++-=? 2. 用LU 分解法解方程组,Ax b =其中 4824012242412120620266216A --?? ?- ?= ? ?-??,4422b ?? ? ?= ?- ?-?? 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组: 123234 1231234102118311210631125x x x x x x x x x x x x x -+=-??-+=-??-+=??-+-+ =? 二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 1111221122222n n n n nn n n b x b x b x g b x b x g b x g +++=??++=????= ? 这个过程就是消元,然后再回代就好了。具体过程如下: 对于1,2, ,1k n =-,若() 0,k kk a ≠依次计算

()() (1)()()(1)()()/,,1, ,k k ik ik kk k k k ij ij ik kj k k k i i ik k m a a a a m a b b m b i j k n ++==-=-=+ 然后将其回代得到: ()() ()()()1/()/,1,2,,1 n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+?=??=-=--? ? ∑ 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现() 0k kk a =的情况,这时消元就无法进行了,即使主元数() 0,k kk a ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU 分解)的原理 先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 1111111 11 1,1,2,,/,2,,,,,1,,,2,3, ()/,1,2, ,i i i i k kj kj km mj m k ik ik im mk kk m u a i n l a u i n u a l u j k k n k n l a l u u i k k n k n -=-===?? ==?? =-=+??=??=-=++≠?? ∑∑且 由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为 11 111,2,3,/()/,1,2, ,1 i i i ij j j n n nn n i i ij j ii j i y b y b l y i n x y u x y u x u i n n -==+=??? =-=?? =??? =-=--?? ∑∑ 以上为LU 分解法。

熵值法的原理及实例讲解

熵值法的原理及实例讲解 熵值法 1.算法简介熵值法是一种客观赋权法,其根据各项指标观测值所提供的信息的大小来确定指标权重。设有m个待评方案,n项评价指标,形成原始指标数据矩阵X?(xij)m?n,对于某项指标xj,指标值Xij的差距越大,则该指标在综合评价中所起的作用越大;如果某项指标的指标值全部相等,则该指标在综合评价中不起作用。在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性就越大,熵也越大.根据熵的特性,我们可以通过计算熵值来判断一个方案的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大!因此,可根据各项指标的变异程度,利用信息熵这个工具,计算出各

个指标的权重,为多指标综合评价提供依据! 2.算法实现过程数据矩阵?X11?X1m??????其中Xij为第i个方案第j个指标的数值A????X??n1?Xnm?n? 数据的非负数化处理于熵值法计算采用的是各个方案某一指标占同一指标值总和的比值,因此不存在量纲的影响,不需要进行标准化处理,若数据中有负数,就需要对数据进行非负化处理!此外,为了避免求熵值时对数的无意义,需要进行数据平移:对于越大越好的指标:’Xij?Xij?min(X1j,X2j,?,Xn j)max(X1j,X2j,?,Xnj)?min(X1j,X2j,?,Xnj) ?1,i?1,2,?,n;j?1,2,?,m对于越小越好的指标:’Xij?max(X1j,X2j,?,Xnj)?Xijm ax(X1j,X2j,?,Xnj)?min(X1j,X2j,?,Xnj)?1,i ?1,2,?,n;j?1,2,?,m为了方便起见,仍记非负化处理后的数据为Xij 计算第j 项指标下第i个方案占该指标的比重Pij?Xij?Xi?1n(j?1,2,?m) 计算第j项指标的熵值ej??k*?Pijlog(Pij),其中

matlab动力学解析程序详解

·· 1.微分方程的定义 对于duffing 方程03 2 =++x x x ω ,先将方程写作??? --==3 1122 21x x x x x ω function dy=duffing(t,x) omega=1;%定义参数 f1=x(2); f2=-omega^2*x(1)-x(1)^3; dy=[f1;f2]; 2.微分方程的求解 function solve (tstop) tstop=500;%定义时间长度 y0=[0.01;0];%定义初始条件 [t,y]=ode45('duffing',tstop,y0,[]); function solve (tstop) step=0.01;%定义步长 y0=rand(1,2);%随机初始条件 tspan=[0:step:500];%定义时间范围 [t,y]=ode45('duffing',tspan,y0); 3.时间历程的绘制 时间历程横轴为t ,纵轴为y ,绘制时只取稳态部分。 plot(t,y(:,1));%绘制y 的时间历程 xlabel('t')%横轴为t ylabel('y')%纵轴为y

·· grid;%显示网格线 axis([460 500 -Inf Inf])%图形显示范围设置 4.相图的绘制 相图的横轴为y ,纵轴为dy/dt ,绘制时也只取稳态部分。红色部分表示只取最后1000个点。 plot(y(end-1000:end ,1),y(end-1000:end ,2));%绘制y 的时间历程 xlabel('y')%横轴为y ylabel('dy/dt')%纵轴为dy/dt grid;%显示网格线 5.Poincare 映射的绘制 对于不同的系统,Poincare 截面的选取方法也不同 对于自治系统一般每过其对应线性系统的固有周期,截取一次 对于非自治系统,一般每过其激励的周期,截取一次 例程:duffing 方程03 2=++x x x ω 的poincare 映射 function poincare(tstop) global omega; omega=1; T=2*pi/omega;%线性系统的周期或激励的周期 step=T/100;%定义步长为T/100 y0=[0.01;0];%初始条件 tspan=[0:step:100*T];%定义时间范围 [t,y]=ode45('duffing',tspan,y0); for i=5000:100:10000%稳态过程每个周期取一个点 plot(y(i,1),y(i,2),'b.'); hold on;% 保留上一次的图形 end

Matlab学习系列19.-熵值法确定权重

19.熵值法确定权重 一、基本原理 在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。 根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。 二、熵值法步骤 1. 选取n个国家,m个指标,则x j为第i个国家的第j个指标的数值(i=1, 2…,n; j=1,2,…,m); 2. 指标的归一化处理:异质指标同质化 由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令X j X j ,从而解决各项不同质指标值的同质化问题。而且,由于正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。其具体方法如下: 正向指标: X ij min {勺公2),...,人)} X ij max{X ij,X2j,...,X nj} min {勺公?」,…,x j

负向指标:

max{X ij,X2j,...,X nj} X j X j max{X jj,X2j,...,X nj} m in {勺必),…,x^} 则X j为第i个国家的第j个指标的数值(i=1,2…,n; j=1,2,…,m) 为了方便起见,归一化后的数据X j仍记为X j; 3?计算第j项指标下第i个国家占该指标的比重: X ij P j —, i 1,2..., n, j 1,2..., m X ij i 1 4. 计算第j项指标的熵值: n e j k P ij ln( p j) i 1 其中,k=1/ln(n)>0.满足e j >0; 5. 计算信息熵冗余度: d j 1 e j; 6. 计算各项指标的权值: d j W j —, j 1,2,...,m d j j 1 7. 计算各国家的综合得分: m s W j p ij, i 1,2,...n j 1 三、Matlab实现 按上述算法步骤,编写Matlab函数:shang.m function [s,w]=sha ng(x) %函数shang(), 实现用熵值法求各指标(列)的权重及各数据行的得分

matlab动力学分析程序详解

1 1.微分方程的定义 对于duffing 方程03 2 =++x x x ω ,先将方程写作??? --==3 1122 21x x x x x ω function dy=duffing(t,x) omega=1;%定义参数 f1=x(2); f2=-omega^2*x(1)-x(1)^3; dy=[f1;f2]; 2.微分方程的求解 function solve (tstop) tstop=500;%定义时间长度 y0=[0.01;0];%定义初始条件 [t,y]=ode45('duffing',tstop,y0,[]); function solve (tstop) step=0.01;%定义步长 y0=rand(1,2);%随机初始条件 tspan=[0:step:500];%定义时间范围 [t,y]=ode45('duffing',tspan,y0); 3.时间历程的绘制 时间历程横轴为t ,纵轴为y ,绘制时只取稳态部分。 plot(t,y(:,1));%绘制y 的时间历程 xlabel('t')%横轴为t ylabel('y')%纵轴为y grid;%显示网格线

2 axis([460 500 -Inf Inf])%图形显示范围设置 4.相图的绘制 相图的横轴为y ,纵轴为dy/dt ,绘制时也只取稳态部分。红色部分表示只取最后1000个点。 plot(y(end-1000:end ,1),y(end-1000:end ,2));%绘制y 的时间历程 xlabel('y')%横轴为y ylabel('dy/dt')%纵轴为dy/dt grid;%显示网格线 5.Poincare 映射的绘制 对于不同的系统,Poincare 截面的选取方法也不同 对于自治系统一般每过其对应线性系统的固有周期,截取一次 对于非自治系统,一般每过其激励的周期,截取一次 例程:duffing 方程03 2=++x x x ω 的poincare 映射 function poincare(tstop) global omega; omega=1; T=2*pi/omega;%线性系统的周期或激励的周期 step=T/100;%定义步长为T/100 y0=[0.01;0];%初始条件 tspan=[0:step:100*T];%定义时间范围 [t,y]=ode45('duffing',tspan,y0); for i=5000:100:10000%稳态过程每个周期取一个点 plot(y(i,1),y(i,2),'b.'); hold on;% 保留上一次的图形 end xlabel('y');ylabel('dy/dt');

熵值法的原理及实例讲解.doc

熵值法 1.算法简介 熵值法是一种客观赋权法,其根据各项指标观测值所提供的信息的大小来确定指标权重。设有m 个待评方案,n 项评价指标,形成原始指标数据矩阵n m ij x X ?=)(,对于某项指标j x ,指标值ij X 的差距越大,则该指标在综合评价中所起的作用越大;如果某项指标的指标值全部相等,则该指标在综合评价中不起作用。 在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性就越大,熵也越大.根据熵的特性,我们可以通过计算熵值来判断一个方案的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响越大!因此,可根据各项指标的变异程度,利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据! 2.算法实现过程 2.1 数据矩阵 m n nm n m X X X X A ?????? ??=ΛM M M Λ1111其中ij X 为第i 个方案第j 个指标的数值 2.2 数据的非负数化处理 由于熵值法计算采用的是各个方案某一指标占同一指标值总和的比值,因此不存在量纲的影响,不需要进行标准化处理,若数据中有负数,就需要对数据进行非负化处理!此外,为了避免求熵值时对数的无意义,需要进行数据平移: 对于越大越好的指标: m j n i X X X X X X X X X X X nj j j nj j j nj j j ij ij ,,2,1;,,2,1,1),,,min(),,,max() ,,,min(212121'ΛΛΛΛΛ==+--=对于越小越好的指标: m j n i X X X X X X X X X X X nj j j nj j j ij nj j j ij ,,2,1;,,2,1,1),,,min(),,,max(),,,max(212121'ΛΛΛΛΛ==+--=为了方便起见,仍记非负化处理后的数据为ij X

matlab 迭代法[精品]

matlab 迭代法[精品] 1. 矩阵 122,211,,,,,,,,,A,111A,222, 11,,,,,,,,221,,112,,,, 证明:求解以为系数矩阵线性方程组的Jacobi迭代式收敛的,而A1 Gauss-Seidel方法是发散的;求解以为系数矩阵线性方程组的A2实验名称Gauss-Seidel是收敛的,而Jacobi方法是发散的. 2. 矩阵 1aa,,,,Aaa,1 ,,,,aa1,, (a) 参数取什么值时,矩阵是正定的. a (b) 取什么值时,求以为系数矩阵线性方程组的Jacobi迭代式收aa 敛的. 1、根据迭代收敛性的充分必要条件来判断Jacobi迭代式与Gauss-Seide 迭代式的收敛性,迭代收敛性仅与方程组系数矩阵有关,与右端无关;而且不依赖于初值的选取。实验目的 2、根据矩阵的判断定理求得矩阵元素a的取值,同时根据矩阵线性方程组的Jacobi迭代式收敛的充分条件(严格对角占优)来求a得取值。 1、(1)检验线性方程组的Jacobi迭代式的收敛性: function jacobi(A) D=zeros(3); for i=1:3 D(i,i)=A(i,i); 实验内容end (算法、程B=D^(-1)*(D-A); 序、步骤和k=max(abs(eig(B))) 方法) if k<1

'该线性方程组的Jacobi迭代式是收敛的' else k>=1 '该线性方程组的Jacobi迭代式是发散的' end (2)检验线性方程组的Gauss-Seide迭代式的收敛性: function Gauss(A) D=zeros(3); L=zeros(3); U=zeros(3); for i=1:3 D(i,i)=A(i,i); end L(2:3,1)=A(2:3,1); L(3,2)=A(3,2); U(1,2:3)=A(1,2:3); U(2,3)=A(2,3); B=-(D+L)^(-1)*U; k=max(abs(eig(B))) if k<1 '该线性方程组的Gauss-Seidel迭代式是收敛的' else k>=1 '该线性方程组的Gauss-Seidel迭代式是发散的' end 2、(1)参数取什么值时,矩阵是正定的.(矩阵的特征值全为正) a >> syms a >> A=[1 a a;a 1 a;a a 1]; >> eig(A) ans = 2*a+1 1-a

Excel,wps中熵值法、熵权法、指标赋权、权重计算。

Excel 、wps 实现熵权法计算过程: 1.熵权法下指标权重的计算 熵权法下首先计算第i 年份的第j 项指标值的权重: i=1,2,3…n; j=1,2,3…m (2) 令k=1/ln(n)>0,为调节系数,计算指标信息熵: i=1,2,3…n; j=1,2,3…m (3) 最后确定计算指标权重: (0

12 2009 0.585203446 0.588585521 13 2010 0.694865622 0.465106715 14 2011 0.500221291 0.472249607 15 2012 1 0.602993026 16 2013 0.863566837 0.558954944 17 2014 0.835655753 0.523401776 18 2015 0.193615668 0.586089558 19 2016 0.52105526 1.000347255 20 =SUM(B1:B19) =SUM(C1:C19) 21 pij =B1/B$20 =C1/C$20 下拉后得到19 行新数据 最后一步就是这个式子的计算,下拉就好了,$会让你下 拉的时候总是除以20行这个数字保持不变。 66 =B21*ln(B21) =C21*LN(C21) 67 下拉后得到19 行新数据 68 (方便起见这里就以这个表格位置输 入了,实际操作中肯定不是,因为 =C$68*B66 =C$*C66 -k=-ln(1/19)(表格中位置为 (C68) ∑== n i ij ij ij y y p 1 ' '

matlab迭代法代码

matlab 迭代法代码 1、%用不动点迭代法求方程x-e A x+4=0的正根与负根,误差限是 10A-6% disp(' 不动点迭代法 '); n0=100; p0=-5; for i=1:n0 p=exp(p0)-4; if abs(p-p0)<=10(6) if p<0 disp('|p-p0|=') disp(abs(p-p0)) disp(' 不动点迭代法求得方程的负根为 :') disp(p); break; else disp(' 不动点迭代法无法求出方程的负根 .') end else p0=p; end end

if i==n0 disp(n0) disp(' 次不动点迭代后无法求出方程的负根') end p1=1.7; for i=1:n0 pp=exp(p1)-4; if abs(pp-p1)<=10(6) if pp>0 disp('|p-p1|=') disp(abs(pp-p1)) disp(' 用不动点迭代法求得方程的正根为 ') disp(pp); else disp(' 用不动点迭代法无法求出方程的正根 '); end break; else p1=pp; end end if i==n0

disp(n0) disp(' 次不动点迭代后无法求出方程的正根 ') end 2、%用牛顿法求方程x-e A x+4=0的正根与负根,误差限是disp(' 牛顿法') n0=80; p0=1; for i=1:n0 p=p0-(p0-exp(p0)+4)/(1-exp(p0)); if abs(p-p0)<=10(6) disp('|p-p0|=') disp(abs(p-p0)) disp(' 用牛顿法求得方程的正根为 ') disp(p); break; else p0=p; end end if i==n0 disp(n0) disp(' 次牛顿迭代后无法求出方程的解 p1=-3; for i=1:n0 p=p1-(p1-exp(p1)+4)/(1-exp(p1)); 10A-6 ') end

二分法、简单迭代法的matlab代码实现教学文案

二分法、简单迭代法的m a t l a b代码实现

实验一非线性方程的数值解法(一)信息与计算科学金融崔振威 201002034031 一、实验目的: 熟悉二分法和简单迭代法的算法实现。 二、实验内容: 教材P40 2.1.5 三、实验要求 1 根据实验内容编写二分法和简单迭代法的算法实现 2 简单比较分析两种算法的误差 3 试构造不同的迭代格式,分析比较其收敛性 (一)、二分法程序: function ef=bisect(fx,xa,xb,n,delta) % fx是由方程转化的关于x的函数,有fx=0。 % xa 解区间上限 % xb 解区间下限 % n 最多循环步数,防止死循环。 %delta 为允许误差 x=xa;fa=eval(fx); x=xb;fb=eval(fx); disp(' [ n xa xb xc fc ]'); for i=1:n xc=(xa+xb)/2;x=xc;fc=eval(fx); X=[i,xa,xb,xc,fc]; disp(X), if fc*fa<0 xb=xc; else xa=xc;

end if (xb-xa)eps & k> fplot('[x^5-3*x^3-2*x^2+2]',[-3,3]);grid 得下图:

熵值法确定权重 matlab程序

% 熵值法确定权重 % 确定指标层权重 clear; clc; x=[99.3600 380952974700.0000 104.8900 1.6400 9.0500 8.2800 101452980.1100 1167334984012.1600 102.1300 228127.0000 5304940.0000 29817.0000 92.1100 466610267000.0000 111.6500 4.3300 5.4400 8.1600 75883744.8300 861424359113.9300 94.6000 1253922.0000 8087900.0000 85194.0000 109.1000 305694698312.7900 110.8800 2.6900 4.1700 8.4000 457459478.2500 1179235081612.4700 110.0600 468307.0000 677090.0000 63273.0000 109.1000 595020144866.6500 99.3000 2.0100 4.5700 4.3000 783157007.2100 5007646096891.2900 109.2600 1993306.0000 1930440.0000 65491.0000 98.2200 372654923215.5300 107.1300 1.4400 8.5100 23.8000 18848868.8700 704821878325.1800 101.1000 162951.0000 62990.0000 22051.0000 104.6500 365675537000.0000 111.7600 2.1400 5.0200 9.3900 27417364.3700 89952506168.7600 104.3300 87487.0000 670.0000 5195.0000 101.2900 366895501851.6100 101.8200 1.9400 8.5100 5.5800 11549288.9200 1258455637300.0000 103.9700 309613.0000 1539200.0000 9674.0000 100.8500 392520087435.9700 106.2700 0.7600 9.5300 8.6500 19599155.2300 48932431697.2000 101.4400 82859.0000 305990.0000 25023.0000 96.3600 347542443470.0800 99.6000 1.2600 9.6900 18.0100 22939492.6400 1297226915351.5100 99.0900 29917.0000 172930.0000 15043.0000

迭代解法的matlab实现

解线性方程组b AX =的迭代法是从初始解出发,根据设计好的步骤用逐次求出的近似解逼近精确解.在第三章中介绍的解线性方程组的直接方法一般适合于A 为低阶稠密矩阵(指n 不大且元多为非零)的情况,而在工程技术和科学计算中常会遇到大型稀疏矩阵(指n 很大且零元较多)的方程组,迭代法在计算和存贮两方面都适合后一种情况.由于迭代法是通过逐次迭代来逼近方程组的解,所以收敛性和收敛速度是构造迭代法时应该注意的问题.另外,因为不同的系数矩阵具有不同的性态,所以大多数迭代方法都具有一定的适用范围.有时,某种方法对于一类方程组迭代收敛,而对另一类方程组迭代时就发散.因此,我们应该学会针对具有不同性质的线性方程组构造不同的迭代. 4.1 迭代法和敛散性及其MATLAB 程序 4.1.2 迭代法敛散性的判别及其MATLAB 程序 根据定理4.1和谱半径定义,现提供一个名为pddpb.m 的M 文件,用于判别迭代公H=eig(B);mH=norm(H,inf); if mH>=1 disp('请注意:因为谱半径不小于1,所以迭代序列发散,谱半径mH 和B 的所 有的特征值H 如下:') else disp('请注意:因为谱半径小于1,所以迭代序列收敛,谱半径mH 和B 的所有 的特征值H 如下:') end mH 4.1.3 与迭代法有关的MATLAB 命令 (一) 提取(产生)对角矩阵和特征值 可以用表4–1的MATLAB 命令提取对角矩阵和特征值. (二) 提取(产生)上(下)三角形矩阵

可以用表4–2的MATLAB命令提取矩阵的上三角形矩阵和下三角形矩阵. (三)稀疏矩阵的处理 对稀疏矩阵在存贮和运算上的特殊处理,是MA TLAB进行大规模科学计算时的特点和优势之一.可以用表4–3的MATLAB命令,输入稀疏矩阵的非零元(零元不必输入),即可进行运算. 4.2 雅可比(Jacobi)迭代及其MATLAB程序 4.2.2 雅可比迭代的收敛性及其MATLAB程序 [n m]=size(A); for j=1:m a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j))); end for i=1:n if a(i)>=0 disp('请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛') return end end if a(i)<0 disp('请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛') end 例4.2.2 用判别雅可比迭代收敛性的MATLAB主程序,判别由下列方程组的雅可比迭

Matlab学习系列19.-熵值法确定权重

19. 熵值法确定权重 一、基本原理 在信息论中,熵是对不确定性的一种度量。信息量越大,不确定性就越小,熵也就越小;信息量越小,不确定性越大,熵也越大。根据熵的特性,可以通过计算熵值来判断一个事件的随机性及无序程度,也可以用熵值来判断某个指标的离散程度,指标的离散程度越大,该指标对综合评价的影响(权重)越大,其熵值越小。 二、熵值法步骤 1. 选取n 个国家,m 个指标,则x ij 为第i 个国家的第j 个指标的数值(i=1, 2…,n; j=1, 2,…,m ); 2. 指标的归一化处理:异质指标同质化 由于各项指标的计量单位并不统一,因此在用它们计算综合指标前,先要对它们进行标准化处理,即把指标的绝对值转化为相对值,并令ij ij x x ,从而解决各项不同质指标值的同质化问题。而且,由于 正向指标和负向指标数值代表的含义不同(正向指标数值越高越好,负向指标数值越低越好),因此,对于高低指标我们用不同的算法进行数据标准化处理。其具体方法如下 :正向指标: 12' 1212min{,,...,}max{,,...,} min{,,...,}ij j j nj ij j j nj j j nj x x x x x x x x x x x 负向指标:

12' 1212max{,,...,}max{,,...,}min{,,...,} j j nj ij ij j j nj j j nj x x x x x x x x x x x 则'ij x 为第i 个国家的第j 个指标的数值(i=1, 2…,n; j=1, 2,…,m )。 为了方便起见,归一化后的数据' ij x 仍记为x ij ;3. 计算第j 项指标下第i 个国家占该指标的比重: 1 ,1,2...,,1,2...,ij ij n ij i x p i n j m x 4. 计算第j 项指标的熵值: 1ln() n j ij ij i e k p p 其中,k=1/ln(n)>0. 满足e j ≥0; 5. 计算信息熵冗余度: 1j j d e ; 6. 计算各项指标的权值: 1 ,1,2,...,j j m j j d w j m d 7. 计算各国家的综合得分: 1,1,2,...m i j ij j s w p i n 三、Matlab 实现 按上述算法步骤,编写 Matlab 函数:shang.m function [s,w]=shang(x) % 函数shang(), 实现用熵值法求各指标(列)的权重及各数据行的得分

不动点迭代法matlab程序

实验四 姓名:木拉丁。尼则木丁班级:信计08-2 学号:20080803405 实验地点:新大机房 实验目的:通过本实验学习利用MATLAB不动点迭代法,抛物线法,斯特芬森迭代法解非线性方程组,及其编程实现,培养编程与上机调试能力。 实验要求:①上机前充分准备,复习有关内容,写出计算步骤,查对程序; ②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言, 算法步骤陈述,变量说明,程序清单,输出计算结果,结果分析等等; ③用编好的程序在Matlab环境中执行。 迭代法 MATLAB程序: function pwxff(f,x0,x1,x2,d,n) f=inline(f); x(1)=x0; x(2)=x1; x(3)=x2; w1=(f(x(2))-f(x(3)))/(x(2)-x(3)); t1=(f(x(1))-f(x(3)))/(x(1)-x(3)); t2=(f(x(1))-f(x(2)))/(x(1)-x(2)); w2=1/(x(1)-x(2))*(t1-t2); w=w1+w2*(x(3)-x(2));

for k=3:n x(k+1)=x(k)-2*f(x(k))/(w+sqrt(w^2-4*f(x(k))*w2)); if abs(x(k+1)-x(k))

相关文档
最新文档